Python 3 遍历文件,直到 EOF。文件不仅仅是一组需要处理的相似行

Python 3 going through a file until EOF. File is not just a set of similar lines needing processing

提问人:nerak99 提问时间:12/20/2016 更新时间:4/26/2018 访问量:399

问:

“我该怎么做”而不是eof(文件)“类型的问题的答案

不完全涵盖我的问题

我有一个格式如下的文件

标题块

数据

另一个标题块

更多数据(每个数据块中具有任意数量的数据行)

...

我不知道有多少个标头数据集

我已经成功读取了第一个块,然后使用循环读取了一组数据,这些循环在数据块的末尾查找空行。

我不能只使用“for each line in openfile”类型的方法,因为我需要一次读取一个标头数据块,然后处理它们。

如何检测最后一个标头数据块。

我目前的方法是使用除构造之外的尝试并等待异常。不是很优雅。

python-3.x 文件-io eof

评论


答:

1赞 Rockcat 12/20/2016 #1

如果不看到您的任何代码,就很难回答......

但我的猜测是您正在阅读文件:fp.read()

fp = open("a.txt")
while True:
    data = fp.read()

相反:

  1. 尝试始终传递您查看的数据长度
  2. 检查读取块是否为空字符串,而不是 None

例如:

fp = open("a.txt")
while True:
    header = fp.read(headerSize)
    if header is '':
        # End of file
        break
    read_dataSize_from_header
    data = fp.read(dataSize)
    if data is '':
        # Error reading file
        raise FileError('Error reading file')
    process_your_data(data)

评论

0赞 nerak99 3/29/2017
最后,我做了大量的正则表达式更改,很容易删除空白行,直到发现块的开始。
0赞 nerak99 4/23/2018 #2

这是一段时间后的事情了,但我为其他进行此搜索的人发布了此内容。 以下脚本经过适当调整后,将读取文件并传递行,直到 EOF。

"""

Script to read a file until the EOF

"""
def get_all_lines(the_file):
    for line in the_file:
        if line.endswith('\n'):
            line = line[:-1]
        yield line


line_counter = 1
data_in = open('OAall.txt')
for line in get_all_lines(data_in):
    print(line)
    print(line_counter)
    line_counter += 1

data_in.close()