windows 当我尝试列出文件大小时,Python脚本抛出异常

u59ebvdq  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(137)

我正在开发一个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模块中的错误吗?

5vf7fwbs

5vf7fwbs1#

os.listdir()命令仅返回文件的 * 名称 *,而不是完整的 * 路径 *(请参阅文档)。所以,如果你在system32文件夹中,你的代码将工作:在这种特殊情况下,文件的名称与它们的相对路径相同,并且它们被找到。
在所有其他情况下,您需要将os.listdir()结果与您的文件夹路径连接起来,以便获得完整的文件路径,以便稍后可以通过getsize()找到它们。以下内容应该有效:

def System32(file_path):
    sys32 = os.listdir(file_path)
    for file in sys32:
        if '.dll' in file:
            # Append file name to folder path, then yield result
            yield os.path.join(file_path, file)

字符串
或者,您可以稍后使用join(),即直接在getsize()中(即os.path.getsize(os.path.join(PATH, size_file)))的数据。这样,最后一行中的name仍然可以正确打印(即只有文件名而不是它的完整路径)。
作为旁注,错误消息(如果我理解正确的话,翻译为 * 系统无法找到指定的文件 *)已经给了你一个线索:它只显示未找到的文件的名称,而不是其路径。(诚然,这可能只是事后才有帮助。)

相关问题