逐行读取文件,可能在文件中进行多次匹配

read from file line by line , multiple match in file possible

我正在读取文件并尝试生成以下内容:

  1. 搜索文件以找到 "temperature",其中 "temperature" 可以在文件
  2. 中出现多次
  3. 组织数据:生成 4 个列表:

    • 第一个列表:list_planes_r(位面名称):[plane_r_01、plane_r_02、plane_r_03、plane_r_04]
    • 第二个列表:temp_plane_r(温度值):[54、50、52、10]
    • 第三个列表:list_planes_f:[plane_f_01、plane_f_02、plane_f_03、plane_f_04]
    • 第 4 个列表:temp_plane_f:[1254, 1354, 1454, 1554]

我总是运行遇到必须拆分列表的问题,当然我不允许这样做。

我做了如下操作:

with open ('test_reading_file.txt', 'r') as f:
   lines = f.readlines()
list_lines = []
for index, line in enumerate(lines):
 if   ('  temperature') in line:
        list_lines.append(lines[index+1: index+5]

我的玩具档案'test_reading_file.txt'

  temperature
-------
 plane_r_01          54
 plane_r_02          50
 plane_r_03          52
 plane_r_04          10


  co
-------
 plane_r_01          54
 plane_r_02          54
 plane_r_03          54
 plane_r_04          54

  temperature
-------
 plane_f_01          1254
 plane_f_02          1354
 plane_f_03          1454
 plane_f_04          1454

更新:图片

这是较短的版本:

list_planes = []
list_temperatures = []
[list_planes.append([sub.split()[0] for sub in content]) for content in list_lines]
[list_temperatures.append([sub.split()[1] for sub in content]) for content in list_lines]

list_planes_r, list_planes_f = list_planes
temp_plane_r, temp_plane_f = list_temperatures

我还不完全清楚你想要什么,但我最好的猜测是你想要两个列表(比如 planestemperatures),这样你就可以

for plane, temperature in zip(planes, temperatures):
    ...

我根据这个猜测生成的代码是

planes, temperatures = [], []
with open('...') as f:

    for line in f:
        if line.strip() == 'temperatures':
            next(f)  # skip a line
            for n in range(4):
                p, t = next(f).strip().split()
                planes.append(p)
                temperatures.append(t)

我已经查看了结果。

代码之所以有效,是因为文件对象(此处 f)是一个 迭代器,我们可以在迭代器内部推进,使用迭代器,使用 next内置。

扫描文件并在找到关键字时阅读一些行的用例是使用 next 的典型示例;不使用 next 意味着使用一个标志和 raising/clearing 它就像你 enter/exit 来自 interesting 区域...