«Требуется ли целое число» при открытии () файла как utf-8?

У меня есть файл, который я пытаюсь открыть в Python со следующей строкой:

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

Вызов этого дает мне ошибку

Ошибка типа: требуется целое число

Я удалил весь другой код, кроме этой одной строки, и все еще получаю ошибку. Что я сделал не так и как я могу открыть это правильно?

 Jim02 апр. 2012 г., 01:33
Это строка f = open (...)
 ninjagecko02 апр. 2012 г., 01:32
Что говорит трассировка? Последняя строкаf = open(...) линия, или внутри библиотеки ядра Python?
 gbulmer02 апр. 2012 г., 01:35
какая версия Python? 3.x? или 2.х?

Ответы на вопрос(5)

Из справочной документации:

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

тебе нужноencoding='utf-8'; Python думает, что вы передаете аргумент для буферизации.

Вы используете неправильное открытие.

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

Как вы можете видеть, он ожидает параметр буферизации, который является целым числом.

То, что вы, вероятно, хотитеcodecs.open:

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

то есть предоставление кодировки (utf-8) при открытии файла

    with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
file.write(result)
Решение Вопроса

open():

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

[...]

Необязательный аргумент буферизации указывает желаемый размер буфера файла: 0 означает небуферизованный, 1 означает буферизацию строки, любое другое положительное значение означает использование буфера (приблизительно) этого размера. Отрицательная буферизация означает использование системной настройки по умолчанию, которая обычно буферизуется строкой для tty-устройств и полностью буферизуется для других файлов. Если опущено, используется системное значение по умолчанию.

Вы, кажется, пытаетесь пройтиopen() вместо этого строка, описывающая кодировку файла в качестве третьего аргумента. Не делай этого.

 Jim02 апр. 2012 г., 01:35
Стрелять. Вы правы. Я хотел использовать codecs.open. Спасибо!

open это размер буфера, а не кодировка файла.

Файловые потоки более или менее независимы от кодирования (за исключением перевода новой строки для файлов, не открытых в двоичном режиме), вам следует обрабатывать кодирование в другом месте (например, когда вы получаете данные сread() позвоните, вы можете интерпретировать это какutf-8 используя егоdecode метод).

Ваш ответ на вопрос