"требуется ли целое число" при открытии () файла как utf-8? - PullRequest
6 голосов
/ 02 апреля 2012

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

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

При вызове этого я получаю ошибку

TypeError: требуется целое число

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

Ответы [ 5 ]

11 голосов
/ 02 апреля 2012

Из документации на open():

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

[...]

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

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

8 голосов
/ 02 апреля 2012

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

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

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

open(filename, mode='rb', encoding=None, errors='strict', buffering=1)
3 голосов
/ 02 апреля 2012

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

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

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

1 голос
/ 02 апреля 2012

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

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

0 голосов
/ 06 ноября 2017

Это решило мою проблему, то есть, предоставив кодировку (utf-8) при открытии файла

    with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
file.write(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...