2016-06-30 8 views
0

ich zu übertreffen versuchen, neues Blatt hinzuzufügen Datei mitUnicodeDecodeError wenn neue Liste hinzufügen mit Python

def add_xlsx_sheet(df, sheet_name=u'Десктопы кратко', index=True, digits=2, path=None): 
book = load_workbook(path) 
writer = pd.ExcelWriter(path, engine='openpyxl') 
writer.book = book 
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) 
if sheet_name in list(writer.sheets.keys()): 
    sh = book.get_sheet_by_name(sheet_name) 
    book.remove_sheet(sh) 
df.to_excel(excel_writer=writer, sheet_name=sheet_name, startrow=0, startcol=0, 
      float_format='%.{}f'.format(digits), index=index) 
pd.DataFrame({}).to_excel(writer, sheet_name=u'Смартфоны кратко') 
pd.DataFrame({}).to_excel(writer, sheet_name=u'Смартфоны полно') 
writer.save() 

df.groupby('member_id').apply(lambda x: add_xlsx_sheet(x, u'Десктопы полно', path='{}.xlsx'.format(x.name))) 

zu übertreffen und einem Fehler

Traceback (most recent call last): 
    File "C:/Users/�����/PycharmProjects/14-27/desktop.py", line 142, in <module> 
df.groupby('member_id').apply(lambda x: add_xlsx_sheet(x, u'Десктопы полно'.decode('utf-8'), path='{}.xlsx'.format(x.name))) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc4 in position 0: invalid continuation byte 

ich früher gefragt, diese Frage zu bekommen, aber es didn‘ t lösen. Ich versuche es mit 'Десктопы полно'.decode('utf-8') überprüfen, aber es hilft nicht.

+0

Die Quellzeile der Fehlermeldung entspricht nicht dem Code, den Sie angezeigt haben. –

+0

Wenn möglich, würde ich vorschlagen, dass Sie sich mit openpyxl 2.4 (derzeit in der Betaversion) beschäftigen, das einige Werkzeuge für die Arbeit mit Pandas bietet. Siehe http://openpyxl.readthedocs.io/en/latest/pandas.html –

Antwort

0

Versuchen Sie Folgendes:

df.groupby('member_id').apply(lambda x: add_xlsx_sheet(x, u'Десктопы полно', path='u{}.xlsx'.format(x.name))) 

Wenn dies nicht funktioniert, kann x.name entschlüsseln müssen. Oder wechseln Sie zu Python 3.

+0

'path = u '{}. Xlsx'.format (x.name)' half nicht – ldevyataykina

+0

Dann '... format (x.name .decode (relevante Kodierung)) 'wie ich vorgeschlagen habe. –

+0

leider funktioniert es nicht. Vielleicht brauche ich in anderen Kodierungen – ldevyataykina