在 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 - 这可能是您遇到的问题的根源。
我正在使用 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 - 这可能是您遇到的问题的根源。