我正在尝试在python中制作一个解析器来读取输入文件,然后将结果组装成几个数组。
数据具有以下结构:
Some_numbers
1
5
6
some_vector
[-0.99612937 -0.08789929 0. ]
[-0.99612937 -0.08789929 0. ]
[ -9.99999987e-01 1.61260621e-04 0.00000000e+00]
Some_data
1239 #int
671
471
851
S4RS #string
517
18
48
912
S4RS
到目前为止,我尝试的方法是:
text_file = 'C:\AA\aa.txt'
lines = open(text_file).read().splitlines()
numbers = []
Vector = []
for line in lines:
line = line.strip()
if line.startswith('Some_numbers'):
continue
numbers.append(line)
if line.startswith('some_vector'):
continue
Vector.append(line)
我遇到的问题是: 1)有多个分隔符 2)尝试根据相关部分分割数据
我也尝试过使用np.genfromtxt以及无数小时拖网。
非常感谢您的意见和建议。
答案 0 :(得分:0)
我不完全确定任何内置函数或库函数可以做到这一点,但在for
循环中存在一些明显的问题。
首先,continue
块中if
之后的语句 - numbers.append(line)
(或等效的向量)。此语句永远不会执行,因为continue会将控件发送回for
循环的开头,并且counter
变量会递增。
其次,你不是基于sections
阅读,这是你的输入所包含的内容,尽管我会说你几乎没有阅读任何内容。
可以使用的示例代码(对于数字和向量) -
text_file = 'C:\AA\aa.txt'
lines = open(text_file).read().splitlines()
numbers = []
Vector = []
section = ''
for line in lines:
line = line.strip()
if line.startswith('Some_numbers'):
section = 'numbers'
continue
elif line.startswith('some_vector'):
section = 'vectors'
continue
elif section == 'numbers':
numbers.append(line) # or numbers.append(int(line)) , whichever you want
elif section == 'vectors':
Vector.append(line)
请注意,上面的代码仅适用于数字和矢量,其他部分需要由您编码。