2015-06-16 44 views
0

我有一個文本文件中生成以下表中,「fasta.txt」如何從文本文件中收集數據以在Python中進行詞典?

   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 

,我想從文本文件中獲取數據,並把它們在任何一個字典或列表的列表。 我試圖用條法

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模塊收集數據

+0

*不起作用*意味着什麼也無能爲力。是文件標籤分隔,還是一個固定大小的字段文件填充是用空格完成的? –

+0

[從CSV文件創建詞典]的可能重複(http://stackoverflow.com/questions/14091387/creating-a-dictionary-from-a-csv-file) – skrrgwasme

回答

1

我想我明白你的表csv文件收集數據,但如果下面不工作讓我知道。我試圖讓這個代碼儘可能通用(即在標題行中讀取,而不是假設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()。希望這可以幫助!

+0

哇!謝謝!它完美的工作!然而,我並沒有真正從「d = defaultdict(lambda:dict())」這一行得到「lambda:dict()」的功能。我可以知道這是什麼意思嗎? –

+0

我其實並不需要它,並且已經將它編輯爲一個簡單的defaultdict。當我想要一個兩層的defaultdict時,我使用這種語法,這是我想了一會兒。例如:'d = defaultdict(lambda:defaultdict(list))'允許你這樣做:'d ['AA'] [1] .append(0.25)'。如果每個雙重密鑰對可能有多個屬性,這很有用。儘管這裏沒有必要。 – cr1msonB1ade

相關問題