2016-08-10 3 views
3
I have a dataframe 
df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]}) 

This is working : 
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1') 
writer.save() 

but when I try 
out_path = "C:\Users\Bala\output\temp-excel.xlsx" 
writer = pd.ExcelWriter(out_path , engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1') 
writer.save() 

Ich erhalte Fehler: IOError: [Errno 22] ungültig Modus ('wb') oder Dateiname: ‚C: \ Benutzer \ Bala Nadella \ output \ temp-excel .xlsx '.Schreibdatenrahmen Excel-Datei auf bestimmten Pfad

So erstellen Sie eine Datei im angegebenen Pfad.

+0

Sie sollten den Fehler hinzufügen, den Sie bekommen. Ist das Verzeichnis C: \ Benutzer \ Bala \ Ausgabe \ vorhanden? – user357269

+0

Ja. Das ist das lokale Verzeichnis meiner Box und es funktioniert für to_csv. –

Antwort

4

String literals

Studie der Tabelle in diesem Link. Sie müssen Ihr '\' mit '\' umgehen. Teilweise ist DOS für dieses Durcheinander in der Welt verantwortlich.

out_path = "C:\\Users\\Bala\\output\\temp-excel.xlsx" 

Oder

out_path = r"C:\Users\Bala\output\temp-excel.xlsx" # the `r` prefix means raw string 

Aber beste Alternative ist dies:

out_path = "C:/Users/Bala/output/temp-excel.xlsx" 

Es wird auf jeder Plattform arbeiten.


Bearbeitet, um die Lösung mit os.path.abspath zu entfernen. Nach dem Kommentar unter dieser Antwort habe ich die Dokumentation selbst gelesen und festgestellt, dass sie einen anderen Zweck hat. Obwohl ich es in der Vergangenheit benutzt habe, um meinen Code dual OS-freundlich zu machen, weil es CWD ordentlich an den Pfad anhängt, und / zu \\ wechselt, wenn ich von Debian zu Windows und umgekehrt übergehe.

+0

'os.path.abspath' ist eine nette Funktion, aber Sie haben völlig falsch dargestellt, was es tut. Es kann keine buchstäblichen Backslashes in Strings magisch interpretieren, und es ist überhaupt nicht notwendig, was hier gebraucht wird. Ehrlich gesagt, ist die ** beste ** Lösung **, vorwärts Schrägstriche statt Backslashes (auch in Windows) zu verwenden. Wenn Sie darauf bestehen, Backslashes zu verwenden, sollten Sie * row strings * verwenden. –

+0

Sie haben Recht. Antwort bearbeitet. Ich benutzte es für Situationen, in denen ich sowohl Windows als auch Ubuntu auf meinem Rechner hatte und den gleichen Code für die Ausführung von Dateien in meinem CWD benötigte. Ich fand es ziemlich praktisch, aber es ist nicht die Lösung für diese Frage. – Kartik

+1

Gut bearbeiten, jetzt fühle ich mich wohl, diese Antwort zu verbessern. –

2

In einem String ist der Backslash ein Escape-Zeichen. Es bedeutet, dass Sie einen speziellen Befehl geben, keinen normalen Charakter. Z.B. "Hello\nWorld" bedeutet, setzen Sie eine neue Zeile zwischen "Hello" und "World". Wenn Sie einen Backslash als Zeichen verwenden möchten, geben Sie ihn als "\\" ein.

Oder noch besser, verwenden Sie einfach Schrägstriche!

Verwandte Themen