当打开()将文件作为utf-8时,“需要一个整数”吗?

时间:2012-04-01 23:29:24

标签: python utf-8

我有一个文件,我正在尝试使用以下行在python中打开:

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

调用此方法会给我错误

  

TypeError:需要一个整数

除了那一行,我删除了所有其他代码,但仍然收到错误。我做错了什么,如何才能正确打开?

5 个答案:

答案 0 :(得分:11)

来自open()的文档:

  

<强> open(name[, mode[, buffering]])

     

[...]

     

可选的buffering参数指定文件所需的缓冲区   size:0表示无缓冲,1表示行缓冲,任何其他正数   value表示使用(大约)该大小的缓冲区。否定的   缓冲意味着使用系统默认值,通常是行   为tty设备缓冲并为其他文件完全缓冲。如果   省略,使用系统默认值。

您似乎试图将描述文件编码的字符串open()作为第三个参数传递。不要那样做。

答案 1 :(得分:8)

您使用的是错误的打开。

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

答案 2 :(得分:3)

来自帮助文档:

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

你需要encoding='utf-8'; python认为你正在传递一个缓冲参数。

答案 3 :(得分:1)

open的最后一个参数是缓冲区的大小,而不是文件的编码。

文件流或多或少与编码无关(除了在二进制模式下未打开的文件上的换行符),您应该在其他地方处理编码(例如,当您通过read()调用获取数据时,可以使用utf-8方法将其解释为decode

答案 4 :(得分:0)

这解决了我的问题,即在打开文件时提供编码(utf-8)

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