2017-02-21 5 views
1

У меня есть простой фрагмент Python, который копирует лист Excel Macros в csvs. Фрагмент взрывается по какой-то странной причине. Я использовал этот фрагмент с Python 2.7 и не испытывал никаких проблем с ним. Недавно я загрузил Python 3.6. Как я могу исправить эту проблему?Python - необходим байтовый объект, а не 'str'

import csv 
import xlrd 

workbook = xlrd.open_workbook('P:/LFC Lots and Sales-NEW.xlsm') 
for sheet in workbook.sheets(): 
with open('{}.csv'.format(sheet.name), 'wb') as f: 
    writer = csv.writer(f) 
    writer.writerows(sheet.row_values(row) for row in range(sheet.nrows)) 
print ("Sheets copied") 

Traceback:

writer.writerows(sheet.row_values(row) for row in range(sheet.nrows)) 
TypeError: a bytes-like object is required, not 'str' 

ответ

1

Понял! Все, что мне нужно было сделать, это изменить wb на w.

import csv 
import xlrd 

workbook = xlrd.open_workbook('P:/LFC Lots and Sales-NEW.xlsm') 
for sheet in workbook.sheets(): 
with open('{}.csv'.format(sheet.name), 'w') as f: 
    writer = csv.writer(f) 
    writer.writerows(sheet.row_values(row) for row in range(sheet.nrows)) 
print ("Sheets copied") 
+1

С Python 3, вы также хотите 'перевод строки = '' 'в вашем открытым - см документы [здесь] (https://docs.python.org/3/library/csv.html # csv.writer) и прочитайте сноску # 1. – DSM