1

代码是从一个目录读取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行。知道为什么会发生这种情况吗?

4

1 回答 1

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))
于 2013-08-07T18:11:05.840 回答