我有一个包含以下数据的文本文件:
['p2_18c', 'p2_19c', 'p2_20c', 'p2_21c', 'p2_22c', 'p2_24c', 'p2_27c']
0.5180625
0.5058125
nan
0.484625
0.484
0.455666666667
0.397214285714
我想对这些数据做什么是使用python重新格式化它,看起来像这样:
2 18 0.5180625
2 19 0.5058125
2 20 nan
2 21 0.484625
2 22 0.484
2 24 0.455666666667
2 27 0.397214285714
这是否可能,如果是这样,我将如何开始它,如果不可能,你认为我能得到的最接近的是什么?一如往常,任何帮助都表示赞赏。
答案 0 :(得分:1)
我会使用ast.literal_eval
将第一行解析为Python列表,然后将每个元素拆分为第一列和第二列,并迭代所有剩余行以获取第三列。
此代码
from ast import literal_eval
file_name = "20115571.txt"
file_name_out = "20115571_out.txt"
with open(file_name) as fh, open(file_name_out,"w") as fh_out:
first_line = fh.readline()
values = literal_eval(first_line)
for value, line in zip(values, fh):
first_column = value[1]
second_column = value[3:5]
third_column = line.strip()
fh_out.write("%s\t%s\t%s\n" % (first_column, second_column, third_column))
将写入输出文件:
2 18 0.5180625
2 19 0.5058125
2 20 nan
2 21 0.484625
2 22 0.484
2 24 0.455666666667
2 27 0.397214285714
答案 1 :(得分:0)
其中一种方式是这样的:
>>> import ast
>>> data=open('./text.txt','r').readlines()
>>> a=[x.strip('pc').split('_') for x in ast.literal_eval(data[0].strip())]
>>> for x,y in zip(a,data[1:]):
x.append(y.strip())
>>> a
[['2', '18', '0.5180625'], ['2', '19', '0.5058125'], ['2', '20', 'nan'], ['2', '21', '0.484625'], ['2', '22', '0.484'], ['2', '24', '0.455666666667'], ['2', '27', '0.397214285714']]
答案 2 :(得分:0)
您可以尝试:
$ cat t.py
#/usr/bin/env python
with open("data") as file:
col_1_2=eval(file.readline().strip())
for row in col_1_2:
print "\t".join(row[1:-1].split('_') + [file.readline().strip()])
给出:
$ python t.py
2 18 0.5180625
2 19 0.5058125
2 20 nan
2 21 0.484625
2 22 0.484
2 24 0.455666666667
2 27 0.397214285714
请注意,如果您不信任该文件的内容,则应使用ast.literal_val
而不是eval
。