我正在解析文件(.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
答案 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')