我正在使用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
不存在。有没有人遇到过这个神秘的问题?无论如何要绕过这个?这是什么原因?谢谢。
答案 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正式中断 - 这可能是您遇到的问题的根源。