我正在解析一个文件(.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
最佳答案
首先,您可以使用 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']]]
然后压缩
您的内部列表以获得以下内容:
>>> 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')
关于python - 将已解析的文件导出到python中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27692949/