代码是从目录中读取xls文件,将其转换为csv文件并将其复制到另一个目录。
filePath = os.path.join('.', 'attachments')
filePaths = [f for f in os.listdir(filePath) if os.path.isfile(os.path.join(filePath, f)) and f.endswith('.xls')]
for f in filePaths:
wb = xlrd.open_workbook(os.path.join(filePath, f))
sheet = wb.sheet_by_index(0)
filename = f + '.csv'
fp = open(os.path.join(filePath, filename), 'wb')
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for rownum in xrange(sheet.nrows):
wr.writerow(sheet.row_values(rownum))
fp.close
shutil.copy(os.path.join('.', 'attachments', filename), new_directory)
结果是: xls文件已成功转换为csv文件,但在new_directory中,复制的文件仅包含csv文件的一部分。
例如,原始csv文件有30行,但在复制的文件中,只有17行。知道为什么会这样吗?
答案 0 :(得分:3)
这是你的问题:
fp.close
您需要调用 close
方法,而不仅仅是将其作为方法引用。所以:
fp.close()
但是,如果您使用with
语句而不是试图找出明确close
所有内容的位置,它会让您的生活更轻松:
with open(os.path.join(filePath, filename), 'wb') as fp:
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for rownum in xrange(sheet.nrows):
wr.writerow(sheet.row_values(rownum))