readline()一次返回一个字符

时间:2018-03-21 22:46:18

标签: python-3.x readline

我在Windows 10上使用Python 3.6.4和Fall Creators Update。我正在尝试使用以下代码读取XML文件:

readline()

0x0a在每次通话时返回一个字符,而不是完整的一行。该文件是在Linux上生成的,绝对编码为UTF8,在开头没有任何特殊内容,例如BOM,并且已经过十六进制转储验证以包含有效数据。行结束是-1,因为它来自Linux。我尝试将readline()指定为SwitchNavigator的参数,这应该是默认值,而不会改变行为。该文件非常大(> 240GB),但问题发生在文件的开头。

有关我可能做错的任何建议吗?

2 个答案:

答案 0 :(得分:5)

readline()将返回一行作为字符串(然后迭代)。您应该使用readlines()代替,因为这将为您提供for循环将迭代的行列表,一次一行。

更好,更有效:

    for line in file:
        do_something(line)

答案 1 :(得分:0)

readline()返回表示文件中一行的字符串,而readlines()返回一个列表,每一项都是一行。很明显

for line in file.readline()

遍历一个字符串,这就是为什么要得到一个字符

如果要遍历文件并避免阻塞内存,请尝试以下操作:

line = '1'
while line:
    line = f.readline() 
    if !line:
        break
    do_something(line)

或:

line = f.readline()
while line:
    do_something(line)
    line = f.readline()

顺便说一句,beautifulsoup是一个有用的xml短语软件包。