чтение из файла построчно, возможно многократное совпадение в файле - PullRequest
0 голосов
/ 18 октября 2018

Я читаю из файла и пытаюсь произвести следующее:

  1. Искать в файле, чтобы найти «температуру», где «температура» может встречаться несколько раз в файле
  2. Организовать данные: создать 4 списка:

    • 1-й список: list_planes_r (имя самолетов): [plane_r_01, plane_r_02, plane_r_03, plane_r_04]
    • 2-й список:temp_plane_r (значения температуры): [54, 50, 52, 10]
    • 3-й список: 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 голосов
/ 18 октября 2018

Я не совсем ясно, что вы хотите, но я думаю, что вы хотите два списка (скажем, planes и temperatures), чтобы вы могли сделать

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 означает использовать флаг и поднимать / очищать его при входе / выходе из интересной зоны ...

0 голосов
/ 18 октября 2018

Вот более короткая версия:

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
...