我要做的是打开csv文件,在里面做更改并保存它。我的代码是这样的:
savePath = r'D:file.csv'
with xw.App(visible=True) as app:
wb = app.books.open(savePath)
sheet1 = wb.sheets[0]
saveDF = sheet1.range(wb.sheets[0].used_range.address).options(pd.DataFrame, chunksize=30_000, index=False).value
wb.sheets[0].clear()
wb.sheets[0].range('A1').options(index=False, header=True).value = saveDF
wb.api.SaveAs(savePath, FileFormat=FileFormat.xlCSV)
这段代码有点工作,但当它保存文件时,它问我是否要覆盖文件,因为它已经存在。
我所做的就是将它保存为"csv。txt"文件,然后删除".csv"文件和重命名".csv.txt"文件返回到".csv"文件使用下面的代码:
savePath = r'D:file.csv'
with xw.App(visible=True) as app:
wb = app.books.open(savePath)
sheet1 = wb.sheets[0]
saveDF = sheet1.range(wb.sheets[0].used_range.address).options(pd.DataFrame, chunksize=30_000, index=False).value
wb.sheets[0].clear()
wb.sheets[0].range('A1').options(index=False, header=True).value = saveDF
wb.api.SaveAs(savePath + '.txt', FileFormat=FileFormat.xlCSV)
os.remove(savePath)
os.rename(savePath + '.txt', savePath)
问题是我在这里得到错误:
"PermissionError: [WinError 32]该进程无法访问该文件,因为它正在被另一个进程使用:">
这意味着Python在保存文件时尝试重命名文件。
我的问题是:
是否有一种方法可以覆盖csv文件而无需手动单击"文件已存在"-您想要覆盖它吗?提示?
是否有什么我可以改变我的代码不得到[WinError 32]上面显示?
我怎么能改变我的代码不打开excel的两个实例(现在它打开空白一个-可能当我使用"with";语句和第二个与我的文件当我使用app.books.open) ?
事先感谢您的帮助。
我有同样的问题,由excel Writer保存的excel文件被损坏。
- 如果您在前面的行中使用pd编写excel文件。ExcelWriter和后来的xlwings使用相同的文件,Writer使用上下文管理器。
- 你不必用xlwings覆盖文件,你可以简单地做:
wb.save(path=None)
。它将以相同的名称保存相同的文件。只要注意你正在使用的文件,如果它是一个健康的excel文件-我的意思是没有损坏。