2017-02-21 12 views
1

Ich habe hier ein einfaches Python-Snippet, das Macros Excelsheet in csvs kopiert. Das Snippet explodiert aus irgendeinem Grund. Ich habe dieses Snippet mit Python 2.7 ausgeführt und hatte kein Problem damit. Ich habe kürzlich Python 3.6 heruntergeladen. Wie kann ich dieses Problem beheben?Python - ein Byte-ähnliches Objekt wird benötigt, nicht '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' 

Antwort

1

Verstanden! Alles, was ich tun musste, war die wb zu w zu ändern.

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

Mit Python 3, Sie wollen auch 'newline = ''' in Ihrem offenen - siehe die Dokumentation [hier] (https://docs.python.org/3/library/csv.html # csv.writer) und lies Fußnote 1. – DSM

Verwandte Themen