在使用 xlutils.filter ( http://www.python-excel.org/ ) 并修复以下错误后,谁能帮我删除 xls 文件?我尝试从文件系统(Windows 7 64 位)中删除一个 excel 文件,但它说:
Traceback (most recent call last):
File "insert_n_blank_rows.py", line 93, in <module>
main()
File "insert_n_blank_rows.py", line 89, in main
insert_n_blank_rows(inputfile, n_rows, position)
File "insert_n_blank_rows.py", line 80, in insert_n_blank_rows
os.remove(filename)
WindowsError: [Error 32] The process cannot access the file because it is being
used by another process: 'text.xls'
我想遵循明智的建议,仅使用以下方法打开文件:
with open(inputfile) as f:
...
在 with 子句之后删除文件,但在这种情况下我不知道如何处理。任何人都可以重现该错误,如果可以,是否有人建议如何解决此问题?作为 inputfile.xls,您可以使用 Excel 97 格式表,其中 1 列中有 4 行文本。
我的 python 文件“insert_n_blank_rows.py”是:
__author__ = "Arjen Jellema"
"""
This script will insert n empty rows after an excelsheetposition
into a excel sheet using module xlrd and xlwt
first it copies the file
and then inserts empty rows
then saves the new file
then removes the old file
"""
import os
import sys
import xlrd
import xlwt
from xlutils.filter import BaseReader, BaseFilter, BaseWriter, process
def insert_n_blank_rows(filename, n_rows, position):
# this function will insert n blank row right after position as read from
# an Excelsheet; so the cell A1 has row 1
class Reader(BaseReader):
def get_filepaths(self):
return [os.path.abspath(filename)]
class Filter(BaseFilter):
pending_row = None
def workbook(self,rdbook,wtbook_name):
self.next.workbook(rdbook,filename+'.new')
def row(self,rdrowx,wtrowx):
self.pending_row = (rdrowx,wtrowx)
def cell(self,rdrowx,rdcolx,wtrowx,wtcolx):
row_offset = 0
col_offset = 0
buildHistoryIndexEnd = position
if rdrowx >= buildHistoryIndexEnd:
row_offset = 1
if rdcolx > 1:
col_offset = 0
self.next.cell(rdrowx,rdcolx,wtrowx+row_offset,wtcolx+col_offset)
class Writer(BaseWriter):
def get_stream(self,filename):
return file(filename,'wb')
if n_rows == 0 or n_rows < 0:
# give warning
print "Warning: number of rows is equal to or smaller than 0,",
print " nothing inserted"
raw_input()
sys.exit()
elif n_rows == 1:
# inserts 1 empty row or column in sheet
process(Reader(),Filter(),Writer())
elif n_rows == 2:
# inserts 2 empty rows or columns in sheet
process(Reader(),Filter(),Filter(),Writer())
elif n_rows == 3:
# inserts 3 empty rows or columns in sheet
process(Reader(),Filter(),Filter(),Filter(),Writer())
elif n_rows == 4:
# inserts 4 empty rows or columns in sheet
process(Reader(),Filter(),Filter(),Filter(),Filter(),Writer())
elif n_rows == 5:
# inserts 5 empty rows or columns in sheet
process(Reader(),Filter(),Filter(),Filter(),Filter(),Filter(),Writer())
elif n_rows > 5:
# give warning
print "Warning: number of rows exceeds 5,",
print " nothing inserted"
raw_input()
sys.exit()
else:
print "Warning, something unexpected happened"
raw_input()
sys.exit()
# remove old file
os.remove(filename)
os.rename(filename+".new", filename.rstrip('.new'))
def main():
inputfile = "text.xls"
# this will insert n rows after position
n_rows = 3
position = 1
insert_n_blank_rows(inputfile, n_rows, position)
if __name__ == "__main__":
main()
sys.exit()