Python open("x", "r") - Funktion, wie kann ich wissen, oder kontrollieren, welche Codierung die Datei haben soll?
Wenn ein python-Skript verwendet das open("filename", "r")
- Funktion zu öffnen, und anschließend Lesen, den Inhalt einer text-Datei, wie kann ich feststellen, welche Kodierung diese Datei haben soll?
Hinweis, dass ich da bin das Skript ausgeführt von meinem eigenen Programm, wenn es irgendeinen Weg gibt, dies zu kontrollieren durch die Umgebungsvariablen, dann ist das gut genug für mich.
Dies ist Python 2.7, die durch die Art und Weise.
Den code in Frage kommt von Mercurial, es kann eine Liste von Dateien, sagen, fügen Sie dem repository eine Datei auf der Festplatte, statt der übergabe auf der Kommandozeile.
Also im Grunde anstelle dieser:
hg add A B C
Ich kann schreiben A, B und C in eine Datei mit Zeilenumbruch zwischen den einzelnen, und führen Sie dann die folgenden:
hg add listfile:input.txt
Den code, landet diese Datei Lesen, ist dies:
files = open(name, 'r').read().split(delimiter)
Daher meine Frage. Die Antwort, die ich gegeben wurde, im IRC, wenn ich Frage, welche Codierung ich nehmen sollte, war dies:
ist es die gleiche Codierung, als die, die Sie verwenden in der Befehlszeile bei der übergabe eines Datei-argument
Ich nehme dies bedeuten, dass es die gleiche Codierung, die ich "verwenden", wenn ich ausführen, Mercurial (hg). Da habe ich keine Ahnung welche Codierung das ist, ich gebe einfach alles zu .NETTO-Prozess-Objekt, Frage ich hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht. Lesen einer Datei ist unabhängig von seiner Codierung; Sie müssen wissen, der Codierung im Voraus, um richtig zu interpretieren, die bytes, die Sie Lesen.
Zum Beispiel, wenn Sie wissen, die Datei ist in UTF-8 codiert:
Oder wenn Sie wissen, wird die Datei nur ASCII:
Wenn Sie wirklich nicht wissen, dass die Codierung der Datei, dann gibt es offensichtlich keine Garantie dafür, dass Sie ihn richtig Lesen können; Sie können aber denke mal bei der Codierung mit einem tool wie
chardet
.UPDATE:
Ich glaube, ich verstehe nun deine Frage. Ich dachte, du hättest eine Datei, die Sie benötigt, um code zu schreiben, aber es scheint, Sie haben code, den Sie schreiben müssen, eine Datei 😉
Den code in Frage, die wahrscheinlich nur beschäftigt sich richtig mit ASCII - (es ist möglich, die strings konvertiert werden später, aber unwahrscheinlich, denke ich). So dass Sie wollen, um text-Datei, die enthält nur ASCII (codepoint < 128) Zeichen, und stellen Sie sicher, es ist gespeichert in einem ASCII-Codierung (d.h. nicht UTF-16 oder etwas in der Art). Dies ist ein wenig bedauerlich, wenn man bedenkt, dass Mercurial-Angebote mit Dateinamen, die Unicode-Zeichen enthalten.
files = open(name, 'r').read().split(delimiter)