我正在读取文件,并尝试产生以下内容:
组织数据:产生4个列表:
我总是遇到必须拆分列表的问题,当然我不允许这样做。
我这样做如下:
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
答案 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)
我还没有完全弄清您想要什么,但是我最好的猜测是您想要两个列表(例如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
)是一个 iterator ,我们可以使用内置的next
在迭代器中进行操作,并消耗迭代器。< / p>
用例扫描文件并在找到关键字时读取一些行是使用next
的典型示例;不使用next
意味着使用标志并在您从有趣区域进入/退出时升起/清除它...