2015-06-16 9 views
0

У меня есть следующая таблица генерируется в виде текстового файла, «fasta.txt»Как собирать данные из текстового файла в dict в 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, который использует уникальный модуль csv для сбора данных.

+0

* не работает * ничего не значит и беспомощно. И является ли вкладка файла ограничена, или это файл полей фиксированного размера, где заполнение выполняется пробелами? –

+0

Возможный дубликат [Создание словаря из файла CSV] (http://stackoverflow.com/questions/14091387/creating-a-dictionary-from-a-csv-file) – skrrgwasme

ответ

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(), если вы собираетесь просто разделить на белое пространство (по умолчанию для разделения), как вы можете увидеть в моем коде. Надеюсь это поможет!

+0

Вау! Спасибо! Это отлично работает! Тем не менее, я действительно не понял, что «lambda: dict()» делает здесь из строки «d = defaultdict (lambda: dict())». Могу я знать, что это значит? –

+0

Мне это действительно не нужно, и я отредактировал его как простой defaultdict. Я использую этот синтаксис, когда мне нужен двухуровневый defaultdict, о котором я размышлял в течение секунды. Например: 'd = defaultdict (lambda: defaultdict (list))' позволяет вам сделать это: 'd ['AA'] [1] .append (0.25)'. Это полезно, если для каждой пары двойных ключей может быть более одного стата. Здесь не нужно. – cr1msonB1ade

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