尝试使用 Python 删除文件,但权限错误表明它们正被另一个进程使用
Trying to delete files using Python, but permissions error says they are being used by another process
我在 python 中使用 os、openpyxl 和 win32com.client 将工作表从多个文件复制到 1 个文件中。
我的代码:
'''
file_list = df['file_names'].unique().tolist()
#create a blank excel file
filepath = (report_path + '\Combined Files.xlsx')
wb = openpyxl.Workbook()
wb.save(filepath)
# copy sheets in reverse order to new file
for s in (file_list[::-1]):
path1 = report_path + '\' + s + '.xlsx'
path2 = filepath
xl = Dispatch("Excel.Application")
wb1 = xl.Workbooks.Open(Filename=path1)
wb2 = xl.Workbooks.Open(Filename=path2)
ws1 = wb1.Worksheets(1)
ws1.Copy(Before=wb2.Worksheets(1))
wb2.Close(SaveChanges=True)
xl.Quit()
# remove files
for f in file_list:
path = os.path.join(location, f)
os.remove(path)
print("%s has been removed successfully" %f)
'''
当我 运行 代码
时出现以下错误
os.remove(path) PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: file one name
我进行了搜索,但找不到与我的代码相关的任何答案 - 或者我无法找到如何使用
Here, , Here, and
仔细看看,你的逻辑似乎有问题。
您应该在读取每个文件并将其添加到输出文件的循环之前打开输出文件(您的“wb2 =”行)。所以...
Open the output file for writing
For each input file in the reverse list:
Open the input file
Write its contents to the output file
Close the input file
Delete the input file
Write out/store the final output file
我认为这更符合您需要的逻辑。
==== 旧答案====
每次通过你的循环,你打开两个文件(wb1 和 wb2)但只关闭一个(wb2)。尝试关闭两者。由于库代码中的错误,可能是未发布的资源。
此外,您的缩进已关闭,这让您更难理解您要做什么。如果您可以 post 代码运行通常会很有帮助,这样错误就可以重现,这样任何 post 回答的人都可以轻松验证他们 post 的准确性。
我在 python 中使用 os、openpyxl 和 win32com.client 将工作表从多个文件复制到 1 个文件中。 我的代码: '''
file_list = df['file_names'].unique().tolist()
#create a blank excel file
filepath = (report_path + '\Combined Files.xlsx')
wb = openpyxl.Workbook()
wb.save(filepath)
# copy sheets in reverse order to new file
for s in (file_list[::-1]):
path1 = report_path + '\' + s + '.xlsx'
path2 = filepath
xl = Dispatch("Excel.Application")
wb1 = xl.Workbooks.Open(Filename=path1)
wb2 = xl.Workbooks.Open(Filename=path2)
ws1 = wb1.Worksheets(1)
ws1.Copy(Before=wb2.Worksheets(1))
wb2.Close(SaveChanges=True)
xl.Quit()
# remove files
for f in file_list:
path = os.path.join(location, f)
os.remove(path)
print("%s has been removed successfully" %f)
'''
当我 运行 代码
时出现以下错误os.remove(path) PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: file one name
我进行了搜索,但找不到与我的代码相关的任何答案 - 或者我无法找到如何使用
Here,
仔细看看,你的逻辑似乎有问题。 您应该在读取每个文件并将其添加到输出文件的循环之前打开输出文件(您的“wb2 =”行)。所以...
Open the output file for writing
For each input file in the reverse list:
Open the input file
Write its contents to the output file
Close the input file
Delete the input file
Write out/store the final output file
我认为这更符合您需要的逻辑。
==== 旧答案==== 每次通过你的循环,你打开两个文件(wb1 和 wb2)但只关闭一个(wb2)。尝试关闭两者。由于库代码中的错误,可能是未发布的资源。
此外,您的缩进已关闭,这让您更难理解您要做什么。如果您可以 post 代码运行通常会很有帮助,这样错误就可以重现,这样任何 post 回答的人都可以轻松验证他们 post 的准确性。