2012-04-01 8 views
6

Ich habe eine Datei Ich versuche, mit der folgenden Zeile in Python zu öffnen:"Eine Ganzzahl ist erforderlich" beim Öffnen() einer Datei als utf-8?

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

dies den Fehler gibt mir Aufruf

TypeError: an integer is required

ich alle anderen Codes außer dass eine Zeile gelöscht bekomme immer noch den Fehler. Was habe ich falsch gemacht und wie kann ich das richtig öffnen?

+0

Was bedeutet die Zurückverfolgungs Datei zu öffnen? Ist die letzte Zeile die Zeile "f = open (...)" oder innerhalb der Python-Core-Bibliotheken? – ninjagecko

+0

Es ist die f = offene (...) Zeile – Jim

+1

welche Version von Python? 3.x? oder 2.x? – gbulmer

Antwort

11

Aus der Dokumentation für open():

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

[...]

The optional buffering argument specifies the file’s desired buffer size: 0 means unbuffered, 1 means line buffered, any other positive value means use a buffer of (approximately) that size. A negative buffering means to use the system default, which is usually line buffered for tty devices and fully buffered for other files. If omitted, the system default is used.

Sie scheinen zu versuchen, die Datei-Codierung als drittes Argument beschreibt stattdessen open() eine Zeichenfolge zu übergeben. Tu das nicht.

+3

Schießen. Du hast recht. Ich wollte Codecs.open verwenden. Vielen Dank! – Jim

1

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

Dateistreams sind mehr oder weniger codierungsunabhängig (mit Ausnahme der Newline-Übersetzung von Dateien, die nicht im Binärmodus geöffnet sind). Sie sollten die Codierung anderswo handhaben (z. B. wenn Sie die Daten mit einem read()-Aufruf abrufen als utf-8 unter Verwendung seiner decode Methode).

7

Sie verwenden das falsche Öffnen.

>>> 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 Pufferungsparameter, der eine ganze Zahl ist.

Was möchten Sie wahrscheinlich ist codecs.open:

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

von der Hilfe-Dokumentation:

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

Sie encoding='utf-8' benötigen; Python denkt, dass Sie ein Argument für die Pufferung übergeben.

0

Diese gelöst mein Problem, dh eine Codierung (utf-8) bereitgestellt wird, während die sagen

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