14

我有一个简单的程序,它在一个目录中查找所有压缩文件夹,以一个压缩文件为目标,获取一个位于压缩文件内的 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.renameshutil.move. 我不断收到错误:

WindowsError:[错误 32] 该进程无法访问该文件,因为它正被另一个进程使用。

我不明白为什么这个错误仍然存​​在,因为我已经关闭了每个文件夹。

4

3 回答 3

12
path = 'C:\Users\me\Documents\Extract'
destination_path = 'C:\Users\me\Documents\Test'
i = 0
for folder in os.listdir(path):
    path_to_zip_file = os.path.join(path, folder)

    zfile = zipfile.ZipFile(path_to_zip_file)
    for name in zfile.namelist():
        if name.endswith('.xls'):
            new_name = str(i)+'_'+name
            new_path = os.path.join(destination_path, new_name)
            # This is obviously going to fail because we just opened it
            shutil.move(path_to_zip_file, new_path)
    i += 1
    zfile.close()

更改了代码片段中的一些变量名称。你现在看到你的问题了吗?您正在尝试移动您的进程已打开的 zip 文件。您需要.xls使用 zipfile 模块将文件复制到目的地。

于 2013-06-13T19:31:20.830 回答
5

如果您使用的是 Windows 计算机,请转到任务管理器并点击进程选项卡。向下滚动到任何说 python 的内容并结束该过程。您可能已经让 python 与其他东西一起运行。然后尝试再次运行您的 python 程序,它应该可以工作。

于 2015-07-20T17:09:37.897 回答
0

下载的文件必须在文件的属性窗口中标记为“取消阻止”,然后才能使用代码。

于 2020-06-09T09:24:00.737 回答