逐行读取文件,可能在文件中进行多次匹配
read from file line by line , multiple match in file possible
我正在读取文件并尝试生成以下内容:
- 搜索文件以找到 "temperature",其中 "temperature" 可以在文件
中出现多次
组织数据:生成 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
我还不完全清楚你想要什么,但我最好的猜测是你想要两个列表(比如 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
意味着使用一个标志和 raising/clearing 它就像你 enter/exit 来自 interesting 区域...
我正在读取文件并尝试生成以下内容:
- 搜索文件以找到 "temperature",其中 "temperature" 可以在文件 中出现多次
组织数据:生成 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
我还不完全清楚你想要什么,但我最好的猜测是你想要两个列表(比如 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
意味着使用一个标志和 raising/clearing 它就像你 enter/exit 来自 interesting 区域...