在python3

时间:2016-11-07 18:06:34

标签: python python-3.x os.walk file-not-found

我正在使用os.walk()方法抓取文件夹。在其中一个文件夹中,有大量文件,大约100,000个。文件类似于: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不存在。有没有人遇到过这个神秘的问题?无论如何要绕过这个?这是什么原因?谢谢。

1 个答案:

答案 0 :(得分:5)

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

for root, dirs, files in os.walk(srcFolder):
    for file in files:
        shutil.copy(os.path.join(root, file), storeFolder)
像瘟疫一样应该避免{p> os.chdir。首先 - 如果更改成功,它将不再是您运行os.walk的目录 - 然后,另一个文件夹上的第二个chdir将失败(停止您的porgram或将您更改为意外的文件夹。)

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

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