如何从Python文本文件中收集数据?

时间:2015-06-16 21:35:33

标签: python python-2.7 csv dictionary

我在文本文件中生成了下表," fasta.txt"

                A               C               G               T               
0               0.195965417867  0.322766570605  0.35446685879   0.126801152738  
A1              0.25            0.1875          0.3125          0.25            
C1              0.25            0.475           0.225           0.05            
G1              0.135135135135  0.243243243243  0.405405405405  0.216216216216  
T1              0.142857142857  0.285714285714  0.285714285714  0.285714285714  
A2              0.125           0.208333333333  0.625           0.0416666666667 
C2              0.0833333333333 0.416666666667  0.305555555556  0.194444444444  
G2              0.111111111111  0.361111111111  0.388888888889  0.138888888889  
T2              0.1             0.15            0.55            0.2             
A3              0.333333333333  0.25            0.416666666667  0.0             
C3              0.314285714286  0.4             0.171428571429  0.114285714286  
G3              0.254901960784  0.372549019608  0.333333333333  0.0392156862745 
T3              0.235294117647  0.235294117647  0.470588235294  0.0588235294118 

我想从文本文件中获取数据并将它们放在dict或列表列表中。 我尝试使用strip方法

with open('fasta.txt') as f:
   for l in f:
      print l.strip().split("\t")

但它并没有像我想要的那样真正发挥作用。

我想知道如何将统计数据(0行除外)收集到dict中,如下所示:

d = {"AA":{"1":0.25,"2":0.125,"3":0.333333333333}, "AC":{"1":0.1875,"2":0.208333333333,"3":0.25}, "AG":{"1":0.3125,"2":0.625,"3":0.416666666667}, "AT":{"1":0.25,"2":0.0416666666667,"3":0.0}, "CA":{"1":...,"2":...,"3":...}, "CC":{"1":...,"2":...,"3":...}, "CG":{"1":...,"2":...,"3":...}, "CT":{"1":...,"2":...,"3":...}, "GA":{"1":...,"2":...,"3":...}, "GC":{"1":...,"2":...,"3":...}, "GG":{"1":...,"2":...,"3":...}, "GT":{"1":...,"2":...,"3":...}, "TA":{"1":...,"2":...,"3":...}, "TC":{"1":...,"2":...,"3":...}, "TT":{"1":...,"2":...,"3":...}, "TG":{"1":...,"2":...,"3":...}}  #(... represents the respective data from the table)

提前谢谢你,我是Python新手。 这里的问题是从文本文件中收集数据,而不是使用它独特的csv模块来收集数据的csv文件

1 个答案:

答案 0 :(得分:1)

我想我理解你所拥有的表格,但如果以下内容不起作用,请告诉我。我试图使这个代码尽可能通用(即在标题行中读取并且不假设4个碱基作为标题,因此这也可以用作蛋白质文件)。这段代码应该产生你想要的字典:

from collections import defaultdict

d=defaultdict(dict)
with open('fasta.txt') as f:
    headerFields=f.readline().split()
    # discard "0" line
    foo=f.readline()
    for line in f:
        fields = line.split()
        for i, stat in enumerate(fields[1:]):
            d[''.join((fields[0][0], headerFields[i]))][fields[0][1]] = stat

print dict(d)

另请注意,如果您要简单地拆分空白区域(默认为拆分),则不需要strip(),就像我在代码中看到的那样。希望这有帮助!