我有一个文件,我正在尝试使用以下行在python中打开:
f = open("C:/data/lastfm-dataset-360k/test_data.tsv", "r", "utf-8")
调用此方法会给我错误
TypeError:需要一个整数
除了那一行,我删除了所有其他代码,但仍然收到错误。我做错了什么,如何才能正确打开?
答案 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)