【问题标题】:How to collect data from text file to dict in Python?如何在 Python 中从文本文件中收集数据到 dict?
【发布时间】:2015-09-01 22:12:39
【问题描述】:

我在文本文件“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 

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

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

但它并没有真正达到我想要的效果。

我想知道如何将统计信息(除了 0 行)收集到一个字典中,如下所示:

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 模块来收集数据

【问题讨论】:

  • 不起作用什么都没有,也很无奈。文件制表符是用制表符分隔的,还是用空格填充的固定大小的字段文件?

标签: python python-2.7 csv dictionary


【解决方案1】:

我想我了解您的表格,但如果以下内容不起作用,请告诉我。我试图使这段代码尽可能通用(即读取标题行而不假设 4 个碱基作为标题,因此这也适用于蛋白质文件)。此代码应生成您想要的 dict:

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(),正如您在我的代码中看到的那样。希望这会有所帮助!

【讨论】:

  • 哇!谢谢!效果很好!但是,我并没有真正从“d=defaultdict(lambda:dict())”行中得到“lambda:dict()”在做什么。我可以知道这是什么意思吗?
  • 我实际上不需要它,并将它编辑为一个简单的默认字典。当我想要一个两层的 defaultdict 时,我使用该语法,我正在考虑一秒钟。例如:d=defaultdict(lambda: defaultdict(list)) 允许您这样做:d['AA'][1].append(0.25)。如果每个双密钥对可能有多个统计信息,这将很有用。不过这里没必要。
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
相关资源
最近更新 更多