提问人:nerak99 提问时间:12/20/2016 更新时间:4/26/2018 访问量:399
Python 3 遍历文件,直到 EOF。文件不仅仅是一组需要处理的相似行
Python 3 going through a file until EOF. File is not just a set of similar lines needing processing
问:
“我该怎么做”而不是eof(文件)“类型的问题的答案
不完全涵盖我的问题
我有一个格式如下的文件
标题块
数据
另一个标题块
更多数据(每个数据块中具有任意数量的数据行)
...
我不知道有多少个标头数据集
我已经成功读取了第一个块,然后使用循环读取了一组数据,这些循环在数据块的末尾查找空行。
我不能只使用“for each line in openfile”类型的方法,因为我需要一次读取一个标头数据块,然后处理它们。
如何检测最后一个标头数据块。
我目前的方法是使用除构造之外的尝试并等待异常。不是很优雅。
答:
1赞
Rockcat
12/20/2016
#1
如果不看到您的任何代码,就很难回答......
但我的猜测是您正在阅读文件:fp.read()
fp = open("a.txt")
while True:
data = fp.read()
相反:
- 尝试始终传递您查看的数据长度
- 检查读取块是否为空字符串,而不是 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()
下一个:我在运行代码时收到 EOF 错误
评论