2017-07-19 1 views
1

Ich versuche, eine Excel-Tabelle mit mehreren Registerkarten, die mit pandas und xlsxwriter erstellt wurden, in Dropbox hochzuladen. Nicht sehr große Dateien, nur etwa 5 MB. Ich bin mit dem dropbox Modul für Python 3So erhalten Sie den binären Inhalt eines pandas xlsxwriter-Objekts für Dropbox-Upload

ich tue:

filename = pd.ExcelWriter('myfile.xlsx' ,engine='xlsxwriter') 
actions.to_excel(filename, sheet_name="Combined Actions") 
filename.save() 

with open(filename, "rb") as f: 
    dbx.files_upload(f.read(), "/MyAPP/"+filename) 

ich in der Dokumentation gelesen, dass files_upload ein Byte Objekt erwartet. Ich bekomme den Fehler: Type Error: Invalid file: <pandas.io.excel__XlsxWriter object at 0x000000000071C48>

Ist dieser Fehler, weil ich die Datei nicht im benötigten Format liefern? Wie kann ich diesen Upload durchführen, damit ich keinen Typfehler erhalte?

Antwort

2

Sie versuchen, die integrierte Funktion open zu verwenden, um ein Objekt zu öffnen. Es erfordert eine Zeichenfolge als erstes Argument (das einen Dateipfad darstellt). Weitere Informationen zur Funktion open finden Sie in der docs.

Die source für Pandas ExcelWriter zeigt, dass es den Dateinamen speichert, den Sie ihm in .path übergeben. So Ihre Variablen Umbenennung besser darzustellen, was sie sind und mit dem .path Attribut des ExcelWriter Beispiel:

excel_file = pd.ExcelWriter('myfile.xlsx', engine='xlsxwriter') 
actions.to_excel(excel_file, sheet_name="Combined Actions") 
excel_file.save() 

with open(excel_file.path, 'rb') as f: 
    dbx.files_upload(f.read(), '/MyAPP/'+excel_file.path) 
+0

Danke, es war auf jeden Fall ein einfacher Fehler. Ihre Lösung ist richtig, auch eine andere korrekte Lösung wäre, 'myfile.xlsx' anstelle von' filename' in 'with open ...' und in' dbx.files_upload' zu verwenden. –

Verwandte Themen