我正在开发一个Python脚本,它可以从windows system32文件夹中捕获所有.DLL
文件,我可以列出所有.dll
文件而没有问题,但是当我试图以MB为单位列出文件大小时,它莫名其妙地福尔斯了异常。
代码:
import os
PATH = 'c:\\Windows\\system32\\'
def System32(file_path):
sys32 = os.listdir(file_path)
for file in sys32:
if '.dll' in file:
yield file
path_sys32 = System32(PATH)
for size_file in path_sys32:
name = size_file
size = os.path.getsize(size_file) / 1000000
print(f'Name: {name} > {size:.2f} MB')
字符串
例外:
Traceback (most recent call last):
File "C:\Users\vinny\Desktop\scripts\main.py", line 15, in <module>
size = os.path.getsize(size_file) / 1000000
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen genericpath>", line 50, in getsize
FileNotFoundError: [WinError 2] O sistema não pode encontrar o arquivo especificado: '69fe178f-26e7-43a9-aa7d-2b616b672dde_eventlogservice.dll'
型
**OBS:**当listdir()
方法为空时,脚本工作正常,但当你传递一个path
给它时,它福尔斯了这个异常。
代码:
import os
def System32():
sys32 = os.listdir()
for file in sys32:
if '.dll' in file:
yield file
path_sys32 = System32()
for size_file in path_sys32:
name = size_file
size = os.path.getsize(size_file) / 1000000
print(f'Name: {name} > {size:.2f} MB')
型
- 上面的代码在没有向
listdir()
方法传递任何东西的情况下工作得很好,基本上要做到这一点,代码需要在system32中。
这可能是os
模块中的错误吗?
1条答案
按热度按时间5vf7fwbs1#
os.listdir()
命令仅返回文件的 * 名称 *,而不是完整的 * 路径 *(请参阅文档)。所以,如果你在system32
文件夹中,你的代码将工作:在这种特殊情况下,文件的名称与它们的相对路径相同,并且它们被找到。在所有其他情况下,您需要将
os.listdir()
结果与您的文件夹路径连接起来,以便获得完整的文件路径,以便稍后可以通过getsize()
找到它们。以下内容应该有效:字符串
或者,您可以稍后使用
join()
,即直接在getsize()
中(即os.path.getsize(os.path.join(PATH, size_file))
)的数据。这样,最后一行中的name
仍然可以正确打印(即只有文件名而不是它的完整路径)。作为旁注,错误消息(如果我理解正确的话,翻译为 * 系统无法找到指定的文件 *)已经给了你一个线索:它只显示未找到的文件的名称,而不是其路径。(诚然,这可能只是事后才有帮助。)