将解析后的文件导出到python中的文本文件中

时间:2014-12-29 17:01:49

标签: python file

我正在解析文件(.GTF文件),现在我有问题将其导出到文本文件中。到目前为止,我已经列出了一个完全如下的列表:

pl = [
    [' id "ENS001" ', ' name "EGSB" ', ' Trans "TTP" ', ' ' ],
    [' id "EN02" ', ' name "EHGT" ', ' Trans "GFT" ', ' ' ]
]

当然,嵌套列表的长度相等(16),父列表中有111559个嵌套列表。正如您在上面的示例中所看到的,嵌套列表有一些对,每对有2个单元,由制表符分隔。

在我的文本文件中,每个嵌套列表都是一行(只有每对的第二个单元),其中的每个项目都将构成列。所有嵌套列表中的第一个单元都相似,它们是列名,因此它们不在行中。而且,我只需要每个嵌套列表的前8项(16项) 我也使用python 2.6.6。我需要这样的文件。

id      name  Trans

ENS001  EGSB  TTP

EN02    EHGT  GFT

1 个答案:

答案 0 :(得分:4)

首先,您可以使用shlex拆分列表以删除引号:

>>> l=[[shlex.split(i) for i in t i!=' '] for t in pl]

[[['id', 'ENS001'], ['name', 'EGSB'], ['Trans', 'TTP']], [['id', 'EN02'], ['name', 'EHGT'], ['Trans', 'GFT']]]

然后zip您的内部列表以获取以下内容:

>>> z= [zip(*i) for i in l]
[[('id', 'name', 'Trans'), ('ENS001', 'EGSB', 'TTP')], [('id', 'name', 'Trans'), ('EN02', 'EHGT', 'GFT')]]

然后获取行:

>>> rows= [i[1] for i in z]
[('ENS001', 'EGSB', 'TTP'), ('EN02', 'EHGT', 'GFT')]

最后将您的数据写入文件:

 with open('out.txt','w') as f :
     f.write (' '.join(z[0][0])+'\n')
     for i in rows:
         f.write (' '.join(i)+'\n')

但是作为一种更有效的方法,您可以将所有列表综合列表放在一个并拒绝单独存储它们:

rows=[zip(*i) for i in [[shlex.split(i) for i in t if i!=' '] for t in pl]]
with open('out.txt','w') as f :
     f.write (' '.join(rows[0][0])+'\n')
     for i in rows:
         f.write (' '.join(i[1])+'\n')