在 python3 中使用 os.walk 时文件读取不正确

Incorrect file reading when using os.walk in python3

我正在使用 os.walk() 方法浏览文件夹。在其中一个文件夹中,有大量的文件,大约有十万个。这些文件看起来像:p_123_456.zip。但它们被读作 p123456.zip。事实上,当我打开 windows 资源管理器浏览文件夹时,前几秒钟文件看起来像 p123456.zip,但随后将它们的外观更改为 p_123_456.zip。这是一个奇怪的场景。

现在,我不能使用 time.sleep(),因为所有文件夹和文件都被读入循环行中的 python 变量。这是代码片段:

    for root, dirs, files in os.walk(srcFolder):
        os.chdir(root)
        for file in files:
            shutil.copy(file, storeFolder)

在最后一行,我得到一个找不到文件的异常,说文件 p123456.zip 不存在。有人 运行 了解这个神秘的问题吗?无论如何要绕过这个?这是什么原因?谢谢。

您似乎没有将实际的文件夹名称与文件名连接起来。尝试将您的代码更改为:

for root, dirs, files in os.walk(srcFolder):
    for file in files:
        shutil.copy(os.path.join(root, file), storeFolder)

os.chdir 应该像瘟疫一样避免。一方面 - 如果更改成功,它将不再是你所在的目录 运行 你的 os.walk - 然后,另一个文件夹上的第二个 chdir 将失败(要么停止您的程序或将您更改为意外的文件夹)。

只需将文件夹名称添加为前缀,不要尝试使用 chdir。

此外,对于上面 ShadowRanger 的评论,如果您 chdir 在其迭代中 os.walk 正式中断 - https://docs.python.org/3/library/os.html#os.walk - 这可能是您遇到的问题的根源。