我有一个特定的文本文件,用于存储关于'n'个点数的某些属性。该文件的行如下:
line 1 yy
line 2 zz
line 3 aa
line 4 bb
line 5 cc
line 6 Absolute values
line 7 lut flp err
line 8 POINT 1
line 9 p 1692611.81738281 1692410.66790291 0.00011884
line 10 v 0.03333289 0.03333289 0.00000000
line 11 s 2238.03499519 2238.03499519 0.00000000
line 12 T 320.62832154 320.67108467 0.00013337
line 13 POINT 2
line 14 p 3031521.94006348 3030845.24499738 0.00022322
line 15 v 0.01444968 0.01444968 0.00000000
line 16 s 1977.17270772 1977.17270772 0.00000000
line 17 T 288.46789127 288.45870243 0.00003185
line 18 POINT 3
.
.
.
n points
我想分别读取数组err_p,err_v,err_s,err_t中所有n个'p','v','s'和'T'的列err下的数字。是否可以使用python完成?行编号只是为了使读者更清楚,它们实际上并不是文本文件的一部分。
答案 0 :(得分:0)
#!/usr/bin/env python3
f = open('data')
err_dict = {k: [] for k in ['p','v','s','T']}
i = 0
for line in f:
i += 1
if i < 8:
continue
if line.startswith("POINT "):
continue
line_split = line.split()
err_dict[line_split[0]].append(line_split[3])
err_p = err_dict['p']
err_v = err_dict['v']
err_s = err_dict['s']
err_t = err_dict['t']
答案 1 :(得分:0)
迭代文件中的行;分开每一行;选出你感兴趣的部分;如果符合您的条件,保存。
使用几个助手来提高可读性
pattern = r'(p|v|s|T)\s*?(\d*?\.[^\s]*)\s*?(\d*?\.[^\s]*)\s*?(\d*?\.[^\s]*)'
regex = re.compile(pattern)
with open('file.txt') as f:
data = f.read()
for match in regex.finditer(data):
err_type, lut, flp, err = match.groups()
array_map[err_type].append(err)
使用一套来测试每一行。
{{1}}
正则表达式解决方案要求所有数字的格式为数字点数。
构建足够的正则表达式模式;一次读取整个文件;找到数据中的所有匹配项;存储错误。
{{1}}
如果这些行的结构与示例不同,则可能会出现意外结果。