Код должен прочитать файл xls из каталога, преобразовать его в файл csv и скопировать в другой каталог.python shutil: копировать только часть файла
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 строк. Любая идея, почему это произойдет?
мммм, какая глупая ошибка, которую я сделал. Большое спасибо за ваш быстрый ответ! – Cacheing
Но я до сих пор не понимаю, почему я не получил ошибку, используя 'fp.close'. В чем разница между 'fp.close' и' fp.close() '? – Cacheing
'fp.close' просто получает ссылку на функцию. Это не ошибка: вы можете сохранить эту ссылку в переменной, чтобы вызвать ее позже, передать ее другой функции, которая в конечном итоге вызовет ее и т. Д. '()' - это операция, которая * вызывает * функцию, т. Е. Выполняет Это. Таким образом, обычный вызов функции имеет две части: 1) получить ссылку на функцию (вы указываете ее имя, так же как получение ссылки на любой другой объект), 2) назовите его. – kindall