解析数组python中的文本文件

时间:2014-02-19 22:31:56

标签: python algorithm parsing

    A   C   G   T
A   2   -1  -1  -1  
C   -1  2   -1  -1
G   -1  -1  2   -1
T   -1  -1  -1  2

此文件由制表符分隔为文本文件,我希望它以与python类似的格式映射。

{'A': {'A': 91, 'C': -114, 'G': -31, 'T': -123},
    'C': {'A': -114, 'C':  100, 'G': -125, 'T': -31},
    'G': {'A': -31, 'C': -125, 'G': 100, 'T':  -114},
    'T': {'A': -123, 'C': -31, 'G':  -114, 'T':  91}}

我已经尝试过但我无法弄清楚如何做到这一点,因为我是python的新手。

请帮忙。

到目前为止我的代码:

seq = flines[0]
    newseq = []
    j = 0
    while(l < 4):
        i = 2
        while(o < 4):
            newseq[i][j] = seqLine[i]
            i = i + 1;
            o = o + 1
        j = j + 1
        l = l + 1
    print (seq)
    print(seqLine)

2 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

import csv

data = {}

with open('myfile.csv', 'rb') as csvfile:
    ntreader = csv.reader(csvfile, delimiter="\t", quotechar='"')
    for rowI, rowData in enumerate(ntreader):
        if rowI == 0:
            headers = rowData[1:]
        else:
            data[rowData[0]] = {k: int(v) for k, v in zip(headers, rowData[1:])}


print data

为了让生活更轻松我使用csv-module并且只是说tab是分隔符,然后我抓住第一行的列标题并将它们用于所有其他行来标记值。

这会产生:

{'A ': {'A': '2', 'C': '-1', 'T': '-1  ', 'G': '-1'}, 
 'C': {'A': '-1', 'C': '2', 'T': '-1', 'G': '-1'},
 'T': {'A': '-1', 'C': '-1', 'T': '2', 'G': '-1'},
 'G': {'A': '-1', 'C': '-1', 'T': '-1', 'G': '2'}}

修改*

对于python&lt; 2.7,如果你切换上面的字典理解线(rowData[0]] = ....)并在同一个地方使用一个简单的循环,它应该有效:

    rowDict = dict()
    for k, v in zip(headers, rowData[1:]):
        rowDict[k] = int(v)
    data[rowData[0]] = rowDict

答案 1 :(得分:1)

使用csv.DictReader可以让您自己完成任务:

reader = DictReader('file.csv', delimiter='\t')
#dictdata = {row['']: row for row in reader}       # <-- python 2.7+ only
dictdata = dict((row[''], row) for row in reader)  # <-- python 2.6 safe

输出:

{'A': {None: [''], '': 'A', 'A': '2', 'C': '-1', 'G': '-1', 'T': '-1'},
 'C': {'': 'C', 'A': '-1', 'C': '2', 'G': '-1', 'T': '-1'},
 'G': {'': 'G', 'A': '-1', 'C': '-1', 'G': '2', 'T': '-1'},
 'T': {'': 'T', 'A': '-1', 'C': '-1', 'G': '-1', 'T': '2'}}

要清理无关紧要的密钥,我需要重建内部dict,但用这个替换最后一行:

dictdata = {row['']: {key: value for key, value in row.iteritems() if key} for row in reader}

输出:

{'A': {'A': '2', 'C': '-1', 'G': '-1', 'T': '-1'},
 'C': {'A': '-1', 'C': '2', 'G': '-1', 'T': '-1'},
 'G': {'A': '-1', 'C': '-1', 'G': '2', 'T': '-1'},
 'T': {'A': '-1', 'C': '-1', 'G': '-1', 'T': '2'}}

编辑:适用于Python&lt; 2.7

在2.7中添加了词典理解。对于2.6及更低版本,请使用dict构造函数:

dictdata = dict((row[''], dict((key, value) for key, value in row.iteritems() if key)) for row in reader)