【发布时间】:2013-06-13 19:20:29
【问题描述】:
我有一个简单的程序,它在一个目录中查找所有压缩文件夹,以一个压缩文件为目标,获取一个位于压缩文件内的 excel 文件并将其移动到另一个位置(它对每个 excel 文件执行此操作,了解如何许多曾经压缩过的文件夹):
path = 'C:\Users\me\Documents\Extract'
new_path = 'C:\Users\me\Documents\Test'
i = 0
for folder in os.listdir(path):
path_to_folder = os.path.join(path, folder)
zfile = zipfile.ZipFile(os.path.join(path, folder))
for name in zfile.namelist():
if name.endswith('.xls'):
new_name = str(i)+'_'+name
new_path = os.path.join(new_path, new_name)
zfile.close()
#os.rename(path_to_folde, new_path) -- ERROR HERE
shutil.move(path_to_folde, new_path) -- AND ERROR HERE
i += 1
我尝试了 2 种方法来移动 excel 文件 os.rename 和 shutil.move。我不断收到错误:
WindowsError: [错误 32] 该进程无法访问该文件,因为它正被另一个进程使用。
我不明白为什么这个错误仍然存在,因为我已经关闭了每个文件夹。
【问题讨论】:
-
找出正在使用它的进程。你在 Excel 中打开了吗?
-
我建议你将
for循环的主体包裹在try/except中——无论如何你都想关闭zfile。 (我当然可能误解了zipfile库的工作原理或WindowsError的性质。) -
@Blender 我没有在 Excel 中打开它,我已经关闭了除 Python 之外的所有程序
-
@2rs2ts 或者更好的是,使用
with -
@2rs2ts 是的,完全正确。它可以做更多,谷歌它:)
标签: python