python shutil:只复制文件的一部分

时间:2013-08-07 18:08:07

标签: python shutil

代码是从目录中读取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行。知道为什么会这样吗?

1 个答案:

答案 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))