python在readline()之后调用read()不会得到整个rest fi

2024-09-29 23:32:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我读了一个文件并在readline()之后调用read(),但是read()函数不返回其余内容。在

我想读一个名为'测试.txt'使用编解码器。 内容如下:

1572278
#*OQL[C++]: Extending C++ with an Object Query Capability.
#@José A. Blakeley
#year1995

我使用的代码是:

^{pr2}$

当我运行它时,我得到的是:

b:1572278
c:#*OQL[C++]: Extending C++ with an Object Query Capability.\r\n#@J

这里,c不是整个文件的其余部分-我无法理解。在


Tags: 文件函数txtan内容readreadlineobject
3条回答

read()调用似乎为我获取了文件的其余部分。也许你没有正确地输出读过的内容,但是我不能告诉你,因为你的问题中没有包含这样做的代码。在

BTW,不需要像使用C和C++代码那样用分号结束Python代码行。在

import codecs
a = codecs.open('test.txt', 'r', 'utf-8')
b = a.readline()
c = a.read()
a.close()

print('b:%r' % b)
print('c:%r' % c)

输出:

^{pr2}$

编辑:我明白了。在

这个对你有用吗?在

import codecs

def line_get(fileobj):
    while 1:
        d = fileobj.readline()
        if d:
            yield d
        else:
            fileobj.close()
            break

a = codecs.open('input','r','utf-8')
b = a.readline()
c = [line for line in line_get(a)]

这是因为StreamReaderWriter的工作方式。当您执行readline()时,它将填充一个linebuffer,当您调用read(),读取codecs.py代码时,它将以快捷方式返回缓冲区中的任何内容,除非您指定一个对输入文件有效的size。在

如果要使用os.path.getsize作为read()的提示:

>>> import os
>>> a = codecs.open('test.txt', 'r', 'utf-8'); a.readline(); a.read(os.path.getsize('test.txt'))
u'1572278\n'
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'

因为您正在slurp文件;您可以先这样做,然后在顶部使用StringIO。在

^{pr2}$

另一个简单的解决方案是调用read()两次,一次获取缓冲输出,另一次调用slurp其余的输出。在

>>> a = codecs.open('test.txt', 'r', 'utf-8'); a.readline(); a.read() + a.read()
u'1572278\n'
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'

相关问题 更多 >

    热门问题