【发布时间】:2016-11-07 18:06:33
【问题描述】:
我正在使用os.walk() 方法浏览文件夹。在其中一个文件夹中,有大量文件,大约有 100,000 个。这些文件看起来像:p_123_456.zip。但它们被读作p123456.zip。事实上,当我打开 Windows 资源管理器浏览文件夹时,前几秒钟文件看起来像 p123456.zip,但随后将它们的外观更改为 p_123_456.zip。这是一个奇怪的场景。
现在,我不能使用time.sleep(),因为所有文件夹和文件都被读入循环行中的python 变量。这是代码的sn-p:
for root, dirs, files in os.walk(srcFolder):
os.chdir(root)
for file in files:
shutil.copy(file, storeFolder)
在最后一行,我得到一个文件未找到异常,说文件p123456.zip 不存在。有没有人遇到过这个神秘的问题?无论如何绕过这个?这是什么原因?谢谢。
【问题讨论】:
-
这有什么不妥之处?尝试打开文件时是否遇到异常?如果是这样,异常和回溯是什么?还是您只是假设 Python 会提取错误的名称?文件夹中是否有可能同时包含
p_123_456.zip和p123456.zip,Windows 资源管理器只需要一些时间来对文件名进行排序以进行显示? -
我想将文件移动到其他文件夹。因此,当读取名称时,它没有'_'。但是当我调用移动操作时,它说这样的文件不存在。
-
移动文件时是否提供源文件的完整路径?
source_full_path = os.path.join(root, fname) -
请添加您实际尝试打开/重命名文件的行。
-
@StevenRumbalski:是的,我在此基础上重新打开了。也就是说,如果
srcFolder或storeFolder是相对路径,os.chdir会破坏;os.walk在这种情况下依赖于一致的工作目录,根据 the docs:“注意:如果您传递相对路径名,请不要在walk()的恢复之间更改当前工作目录。walk()永远不会更改当前目录,并假设它的调用者也没有。”此代码违反了该假设。
标签: python python-3.x os.walk file-not-found