什么是Python中的完美对口“而不是EOF”(What is the perfect counte

2019-07-23 01:38发布

阅读一些文本文件,在C或Pascal,我总是用下面的代码片段来读取数据,直到EOF:

while not eof do begin
  readline(a);
  do_something;
end;

因此,我不知道我该怎么做这个简单而快速的在Python?

Answer 1:

遍历读行文件:

with open('somefile') as openfileobject:
    for line in openfileobject:
        do_something()

File对象是可迭代和产量行,直到EOF。 使用文件对象视为可迭代使用缓冲来确保高性能的读取。

你可以做同样的标准输入(没有必要使用raw_input()

import sys

for line in sys.stdin:
    do_something()

要完成图片,二进制读取可以用做:

from functools import partial

with open('somefile', 'rb') as openfileobject:
    for chunk in iter(partial(openfileobject.read, 1024), b''):
        do_something()

其中chunk将包含多达1024个字节从文件中的时间,而当迭代停止openfileobject.read(1024)开始返回空字节字符串。



Answer 2:

你可以模仿在Python的C成语。

要读取缓冲区最多max_size字节数,你可以这样做:

with open(filename, 'rb') as f:
    while True:
        buf = f.read(max_size)
        if not buf:
            break
        process(buf)

或者,通过行的文本文件行:

# warning -- not idiomatic Python! See below...
with open(filename, 'rb') as f:
    while True:
        line = f.readline()
        if not line:
            break
        process(line)

您需要使用while True / break建设,因为有没有EOF测试在Python比缺乏从读返回的字节等。

在C语言中,你可能有:

while ((ch != '\n') && (ch != EOF)) {
   // read the next ch and add to a buffer
   // ..
}

但是,你不能有这个在Python:

 while (line=f.readline()):
     # syntax error

因为分配不会在表达式中不允许在Python。

这当然是地道在Python这样做:

# THIS IS IDIOMATIC Python. Do this:
with open('somefile') as f:
    for line in f:
        process(line)


Answer 3:

打开文件和阅读它行由行Python的成语是:

with open('filename') as f:
    for line in f:
        do_something(line)

该文件将在上面的代码的结束时自动关闭( with构建体需要的那保健)。

最后,值得一提的是, line将保留尾随换行符。 这可以使用很容易地删除:

line = line.rstrip()


Answer 4:

您可以使用下面的代码片段,以逐行读取,直到文件结束

line = obj.readline()
while(line != ''):

    # Do Something

    line = obj.readline()


Answer 5:

虽然有以上的“做巨蟒方式”,如果一个人想真正拥有基于EOF逻辑的建议的话,我想使用异常处理是要做到这一点 -

try:
    line = raw_input()
    ... whatever needs to be done incase of no EOF ...
except EOFError:
    ... whatever needs to be done incase of EOF ...

例:

$ echo test | python -c "while True: print raw_input()"
test
Traceback (most recent call last):
  File "<string>", line 1, in <module> 
EOFError: EOF when reading a line

或按Ctrl-Zraw_input()提示(Windows中, 按Ctrl-Z的Linux)



Answer 6:

您可以使用下面的代码片段。 readlines方法()立刻在整个文件中读取,并通过线将其分解。

line = obj.readlines()


文章来源: What is the perfect counterpart in Python for “while not EOF”