2017-05-09 2 views
0
IOError: [Errno 22] invalid mode ('w+') or filename: 'hodor_2017-05-09_14:03:38.txt' 

So war ich Probleme mit einer Datei zu erstellen, wo, wie es „name“ [Trennzeichen] „Datumzeit“ .txtErrno 22 ungültig Modus w + oder Dateiname

ich verschiedene Bits von Code war auf der Suche nach oben ist wie :

Turn a string into a valid filename?

python: how to convert a string to utf-8

https://github.com/django/django/blob/master/django/utils/safestring.py

und es scheint immer noch nicht für mich zu arbeiten.

Mein Konzept ist einfach: Geben Sie bei einem Namen und Inhalt eine Datei mit diesem Namen und diesem Inhalt.

Mein Code ist:

def create_json_file(name, contents): 
    filename = u"%s_%s.json" % (name, datetime.datetime.now().strftime("%Y/%m/%d_%H:%M:%S")) 
    print "%s" % filename 
    filename = slugify(filename) 
    f = open(filename, "w+") 
    f.write(contents) 
    f.close() 

und wie Sie i gewesen, es zwicken haben sehen können. Ich habe die Ergebnisse von django nachgeschlagen, die slugify verwenden.

Mein Original hatte diese Zeile nicht. Vielleicht gibt es eine bessere Möglichkeit, die Datei auch zu benennen. Ich denke, der Name und Datetime ist ziemlich normal, aber ich war nicht sicher, welche Begrenzer ich zwischen Name und Datetime usw. verwenden sollte.

Für den Datensatz verwende ich derzeit nicht Django, weil ich keine Notwendigkeit für das Framework habe. Ich versuche nur eine Möglichkeit zu testen, eine Zeichenfolge und eine Json-Karte zu übergeben und im Wesentlichen in eine config.json Datei umzuwandeln.

Schließlich möchte ich eine AJAX-Anfrage von einer Website dazu nutzen, dies zu tun, aber das ist außerhalb des Umfangs dieser Frage.

+1

Bedeutet das nicht nur, dass Windows Doppelpunkte in Dateinamen verbietet? Die Lösung besteht darin, einen anderen Separator zu verwenden. – tdelaney

Antwort

3

ein anderes Trennzeichen in dem Dateinamen Maske verwenden:

filename = u"%s_%s.json" % (name, datetime.datetime.now().strftime("%Y_%m_%d_%H%M%S")) 

Das O zu öffnen 2005/04/01_5 versucht: 45: 04.json. Schrägstriche sind in Datei-/Verzeichnisnamen nicht zulässig.

Bearbeiten: Entfernte Doppelpunkte als Reaktion auf Kommentare.

+2

Unter Windows gibt es auch keine Doppelpunkte. Könnte über das Verschieben nach ISO 8601 Grundformat denken - '% Y% m% dT% H% M% S', keine Doppelpunkte, keine Schrägstriche,' T' trennt den Datumsteil und den Zeitteil ... und, na ja, Es ist ein echter Standard. –

+0

Danke an euch beide. Ich wusste von Schrägstrichen, aus irgendeinem Grund war ich dumm und dachte nicht an den Doppelpunkt. mein Fehler. Ja, ich werde wahrscheinlich nur Isoformat() verwenden – Fallenreaper

+0

@CharlesDuffy nur ein Follow-up, tut es in ISO-Format gibt diesen Fehler 'IOError: [Errno 22] ungültiger Modus ('w +') oder Dateiname: u'hodor_2017-05-10T10 : 23: 07.057000. json'' So scheint es, dass es Standard-ISO nicht tun wird, also habe ich es in Ihr Format verschoben. Es scheint, dass die ISO 8601 standardmäßig mit Pythons String-Klasse verwendet wird: 'YYYY-MM-DDTHH: MM: SS.mmmmmm'. Es funktioniert jedoch mit dem von Ihnen definierten Format. – Fallenreaper

Verwandte Themen