2013-11-21 3 views
0

У меня есть текстовый файл, который содержит следующие данные:Создание данных столбцов из списков

['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 

То, что я хотел бы сделать с этими данными является переформатировать его с помощью питона так, что он выглядит следующим образом:

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

один из способов будет выглядеть так:

>>> 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']] 
1

Я хотел бы разобрать первую строку как Python-список с помощью ast.literal_eval, а затем разделить каждый элемент, чтобы получить первую и вторую колонку, и перебрать все остальное чтобы получить третий столбец.

Этот код

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 
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.

Смежные вопросы