从文件逐行读取,文件中可能有多个匹配项

时间:2018-10-18 09:20:51

标签: python file readlines

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

  1. 搜索文件以找到“温度”,其中“温度”在文件中可能多次出现
  2. 组织数据:产生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

更新:图片current_output

2 个答案:

答案 0 :(得分:1)

以下是较短的版本:

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

答案 1 :(得分:1)

我还没有完全弄清您想要什么,但是我最好的猜测是您想要两个列表(例如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)是一个 iterator ,我们可以使用内置的next在迭代器中进行操作,并消耗迭代器。< / p>

用例扫描文件并在找到关键字时读取一些行是使用next的典型示例;不使用next意味着使用标志并在您从有趣区域进入/退出时升起/清除它...