Skip to main content
 首页 » 编程设计

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

2025年05月04日23zfyouxi

我正在使用 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 将失败(要么停止你的 porgram或将您更改为意外的文件夹)。

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

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