2012-04-01 12 views
6

Tengo un archivo que estoy tratando de abrirse en Python con la siguiente línea:"se requiere un número entero" cuando se abre() 'un archivo como utf-8?

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

Al llamar a este me da el error

TypeError: an integer is required

He eliminado todos los otros códigos, además de que una línea y todavía estoy recibiendo el error. ¿Qué he hecho mal y cómo puedo abrir esto correctamente?

+0

¿Qué dice el rastreo? ¿La última línea es la línea 'f = open (...)', o dentro de las bibliotecas centrales de python? – ninjagecko

+0

Es la línea f = abierta (...) – Jim

+1

¿qué versión de Python? 3.x? o 2.x? – gbulmer

Respuesta

11

De la documentación para 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.

Parece que está tratando de pasar open() una cadena que describe la codificación del archivo como el tercer argumento en su lugar. No hagas eso.

+3

Dispara. Tienes razón. Quería usar codecs.open. ¡Gracias! – Jim

1

El último parámetro para open es el tamaño del búfer, no la codificación del archivo.

Las secuencias de archivos son más o menos codificantes (con la excepción de la traducción de nueva línea en archivos no abiertos en modo binario), debe manejar la codificación en otro lugar (por ejemplo, cuando obtiene los datos con una llamada read(), puede interpretarlo como utf-8 usando su método decode).

7

Está utilizando el abrir incorrectamente.

>>> 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. 

Como puede ver, espera que el parámetro de almacenamiento en búfer sea un número entero.

Lo que probablemente quiere es codecs.open:

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

A partir de los documentos de ayuda:

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

necesita encoding='utf-8'; Python piensa que estás pasando un argumento para el almacenamiento en búfer.

0

esto resuelto mi problema, es decir, proporcionar una codificación (UTF-8) al abrir el archivo

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