【问题标题】:Error 32, Python, file being used by another process错误 32,Python,文件正被另一个进程使用
【发布时间】: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.renameshutil.move。我不断收到错误:

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

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

【问题讨论】:

  • 找出正在使用它的进程。你在 Excel 中打开了吗?
  • 我建议你将 for 循环的主体包裹在 try/except 中——无论如何你都想关闭 zfile。 (我当然可能误解了 zipfile 库的工作原理或 WindowsError 的性质。)
  • @Blender 我没有在 Excel 中打开它,我已经关闭了除 Python 之外的所有程序
  • @2rs2ts 或者更好的是,使用with
  • @2rs2ts 是的,完全正确。它可以做更多,谷歌它:)

标签: python


【解决方案1】:
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()

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

【讨论】:

  • 我正在使用一个名为 shutil.copy2(path_to_folder, new_path) 的函数,这确实会将文件移动到新位置,但由于某种原因文件已损坏。
  • 这是因为您正在对 zipfile 模块提供给您的类文件对象进行操作。您可能已经复制了压缩字节。您将不得不在某些时候使用此方法。 docs.python.org/2/library/zipfile#zipfile.ZipFile.open
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    下载的文件必须在文件的属性窗口中标记为“取消阻止” 在他们可以使用代码之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 2020-10-31
      • 2021-09-28
      • 2011-04-13
      相关资源
      最近更新 更多