将输入数据读取到具有多个分隔符和标题的数组

时间:2015-06-19 20:39:05

标签: python arrays string parsing delimiter

我正在尝试在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以及无数小时拖网。

非常感谢您的意见和建议。

1 个答案:

答案 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)

请注意,上面的代码仅适用于数字和矢量,其他部分需要由您编码。