如何在Python上读取文本文件并在遇到某个值时停止并在遇到值后继续读取

问题描述 投票:0回答:1

我有一个这种格式的文本文件:

0   -82.871 2.52531 36.64   138 96.05
0   -76.1014    2.52577 35.36   137 83.9
0   -76.1869    5.57562 35.36   137 62.8
0   -18.1623    -11.6886    386.08  411 200.9
0   -4.62234    -4.91846    325.92  364 252.2
0   -2.52609    -1.63149    325.92  364 85.4
0   -2.52609    -1.63149    112.16  197 48.4
0   -18.1623    -4.91846    -54.24  67  69.55
0   -18.1623    -4.91846    386.08  411 64.55
12345678  1
12345678  2
2   25.2279 -72.3226    48.16   147 221.55
2   28.7109 -70.2263    48.16   147 1587.7
2   76.1009 -63.4562    46.88   146 110.35
2   31.9979 -65.5526    48.16   147 1601.8
2   35.4805 -63.4559    48.16   147 310.25
2   31.9979 -58.7826    49.44   148 492.8
2   35.4805 -56.6859    46.88   146 42.6
2   1.63117 -43.1461    73.76   167 54.55
2   4.91818 -38.4723    76.32   169 75.4

我编写了一个程序,它使用

line = raw_dat.readlines()[7:]
跳过整个标头并读取整个文件,直到遇到
magic_number
并中断循环:

file = 'Runnumber169raw10.txt'
magic_number = '12345678'

event1 = []
x1 = []
y1 = []
z1 = []
tb1 = []
q1 = []
Xnoselection = []
X = []
distanceradius = 0

with open(file, 'r') as raw_dat:
    line = raw_dat.readlines()[7:]
    
    for lines in line:
        lines.split()
        print(lines)
        if lines.split()[0] == magic_number:
            break

break
语句停止循环并存储值。但我无法找到在这个
break
语句之后继续阅读的方法,因为
break
本质上终止了循环。是否有另一种选择,循环在到达
magic_number
后停止,存储值,然后继续读取并重复?

python pandas data-analysis break txt
1个回答
0
投票

第一次迭代时使用

enumerate()
获取行索引。然后您可以从上次中断的地方重新开始。

with open(file, 'r') as raw_dat:
    line = raw_dat.readlines()[7:]
    
for index, lines in enumerate(line):
    print(lines)
    if lines[0] == magic_number:
        break

for lines in line[index+1:]:
    # do other stuff

或者不将整个文件读入列表,直接循环文件行。

with open(file, 'r') as raw_dat:
    # skip first 7 lines
    for _ in range(7):
        raw_data.readline()

    for lines in raw_dat:
        print(lines)
        if lines.split()[0] == magic_number:
            break

    for lines in raw_dat:
        # do other stuff
© www.soinside.com 2019 - 2024. All rights reserved.