8 Stimmen

"eine ganze Zahl ist erforderlich", wenn eine Datei mit open() als utf-8 geöffnet wird?

Ich habe eine Datei, die ich versuche, in Python mit der folgenden Zeile zu öffnen:

f = open("C:/data/lastfm-dataset-360k/test_data.tsv", "r", "utf-8")

Wenn ich dies aufrufe, erhalte ich die Fehlermeldung

TypeError: eine ganze Zahl ist erforderlich

Ich habe alle anderen Codes außer dieser einen Zeile gelöscht und erhalte immer noch den Fehler. Was habe ich falsch gemacht und wie kann ich es richtig öffnen?

12voto

Kristian Glass Punkte 36033

Aus der Dokumentation für open() :

open(name[, mode[, buffering]])

[...]

Das optionale Argument buffering gibt den gewünschten Puffer für die Datei an Größe: 0 bedeutet ungepuffert, 1 bedeutet zeilengepuffert, jeder andere positive Wert bedeutet, dass ein Puffer von (ungefähr) dieser Größe verwendet wird. [ ] Pufferung bedeutet, dass die Systemvorgabe verwendet wird, die normalerweise zeilengepuffert ist gepuffert für tty-Geräte und vollständig gepuffert für andere Dateien. Wenn weggelassen wird, wird die Systemvorgabe verwendet.

Sie scheinen zu versuchen, die open() eine Zeichenkette, die die Dateikodierung beschreibt, als drittes Argument an. Tun Sie das nicht.

10voto

Glider Punkte 1548

Sie verwenden die falsche Öffnung.

>>> help(open)
Help on built-in function open in module __builtin__:

open(...)
    open(name[, mode[, buffering]]) -> file object

    Open a file using the file() type, returns a file object.  This is the
    preferred way to open a file.  See file.__doc__ for further information.

Wie Sie sehen können, erwartet es den Parameter buffering, der eine ganze Zahl ist.

Was Sie wahrscheinlich wollen, ist codecs.open :

open(filename, mode='rb', encoding=None, errors='strict', buffering=1)

4voto

ninjagecko Punkte 82995

Aus der Hilfedokumentation:

open(...)
    open(file, mode='r', buffering=-1, encoding=None,
         errors=None, newline=None, closefd=True) -> file object

Sie benötigen encoding='utf-8' python denkt, dass Sie ein Argument zur Pufferung übergeben.

2voto

Hamid Punkte 677

Dies löste mein Problem, d.h. die Angabe einer Kodierung (utf-8) beim Öffnen der Datei

    with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
file.write(result)

1voto

Matteo Italia Punkte 119470

Der letzte Parameter von open ist die Größe des Puffers, nicht die Kodierung der Datei.

Dateiströme sind mehr oder weniger kodierungsunabhängig (mit Ausnahme der Übersetzung von Zeilenumbrüchen bei Dateien, die nicht im Binärmodus geöffnet sind), Sie sollten die Kodierung an anderer Stelle behandeln (z. B. wenn Sie die Daten mit einer read() Aufforderung, können Sie sie interpretieren als utf-8 unter Verwendung seiner decode Methode).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X