我是python解析的新手。我想解析以下类型的文本
值一= 5
值2 = 10
此处有一些文字
值三= 15
%一些文字
值一= 12
值2 = 13
此处有一些文字
值三= 11 ..这继续 我想提取一个值。值二。和.value三个。并以表格格式排列它们进行处理。有关如何操作的任何想法
到目前为止,我尝试了以下方法。它给我一个错误:赋值之前引用了两个本地值
import re
import pandas as pd
val_dict = { 'value_one':re.compile(r'value one = (?P<value_one>.*)\n'),
'value_two':re.compile(r'value two = (?P<value_two>.*)\n'),
'value_three':re.compile(r'value three = (?P<value_three>.*)\n')}
def _parse_line(line):
for key, val in val_dict.items():
match = val.search(line)
if match:
return key, match
# if there are no matches
return None, None
def parse_file(filepath):
data = []
with open(filepath, 'r') as file_object:
line = file_object.readline()
while line:
key, match = _parse_line(line)
if key == 'value_one':
value_one = match.group('value_one')
value_one = int(value_one)
if key == 'value_two':
value_two = match.group('value_two')
value_two = int(value_two)
if key == 'value_three':
value_three = match.group('value_three')
value_three = int(value_three)
row = {
'value one': value_one,
'value two': value_two,
'value three': value_three
}
# append the dictionary to the data list
data.append(row)
line = file_object.readline()
data = pd.DataFrame(data)
data.set_index(['value one', 'value two', 'value three'], inplace=True)
data = data.groupby(level=data.index.names).first()
data = data.apply(pd.to_numeric, errors='ignore')
return data
if __name__ == '__main__':
filepath = 'test3.txt'
data = parse_file(filepath)
答案 0 :(得分:1)
您的问题是,在一行上,您只能有naive_time.timestamp()
,'value one'
或'value two'
中的一个,因此在第一行上仅定义了变量'value_three'
,但是您尝试使用所有这三种方法,因此会出现错误。
只有在具有完整序列时,才应追加一行。您可以尝试将代码更改为:
value_one
我还删除了最后一部分,因为恕我直言,这不再是解析文本文件来构建数据框的问题,而仅仅是熊猫数据框的处理。
答案 1 :(得分:0)
您可以尝试以下操作:
import re
import pandas as pd
with open('text.txt') as fd:
data = fd.read()
val_to_pattern = {
'value_one': r'value one = (\d+)',
'value_two': r'value two = (\d+)',
'value_three': r'value three = (\d+)',
}
val_dict = {}
for key, patt in val_to_pattern.items():
val_dict[key] = re.findall(patt, data)
df = pd.DataFrame.from_dict(val_dict)
print(df)
结果:
value_one value_two value_three
0 5 10 15
1 12 13 11