在一个循环中,在每个循环的一行上打印列表中的每个元素
Within a loop print each element from a list on one line per loop
我有这样一个文件:
1:200-320 ['gene_id "xyz";transcript_id "xyzt"; exon_number "1"\n', 'gene_id "xyz";transcript_id "xyzt2"; exon_number "2"\n']
1:3000-3200 ['gene_id "xyz";transcript_id "xy"; exon_number "2"\n']
太乱了,我想通过首先对术语进行分组来整理一下。即拉出 transcript_ids 并写成 transcript_id xyzt, xyzt2;
并最终重复那里的所有条款。
我的方法是先使用替换删除所有乱七八糟的字符
out=open('foo.txt','w')
with open('in.txt', 'r') as f:
for line in f:
tidyline = line.replace('[', "").strip()
tidyline = tidyline.replace(']', "").strip()
tidyline = tidyline.replace('"', "").strip()
tidyline = tidyline.replace("'", "").strip()
tidyline = tidyline.replace(",", "").strip()
out.write("%s\n" %tidyline)
然后使用 re 尝试匹配字符串并拉回此信息。我能做的,只是不确定如何写入文件以将它们保存在适当的行上。
import re
with open('foo.txt', 'r') as f:
for line in f:
result = re.findall('transcript_id\s(\w+)',line)
print result
['xyzt', 'xyzt2']
['xy']
我的想法是做这样的事情:
string= "transcript_id %s,%s" %(results[0], results[1])
file.write("%s\n" %string)
但是因为每行的所有列表都是不同的长度,所以不起作用。
你的最后一个问题(编写可变长度的列表)可以使用字符串的连接方法来解决。试试这个:
s = "transcript_id " + ",".join(results)
为了保存文件操作,您应该将输出文件的打开移动到 with 语句,以避免保留未关闭的文件:
with open('in.txt', 'r') as f, open('foo.txt','w') as out:
...
您真的需要中间步骤编写 foo.txt
还是这只是一个工作?
希望对您有所帮助。
您可以将所有结果放在一个列表中,然后浏览它:
transcript_id_list = []
with open('foo.txt', 'r') as f:
for line in f:
result = re.findall('transcript_id.*?(\w+)',line)
if result:
transcript_id_list.extend(result)
for item in transcript_id_list:
string= "transcript_id %s" % item
file.write("%s\n" % string)
我有这样一个文件:
1:200-320 ['gene_id "xyz";transcript_id "xyzt"; exon_number "1"\n', 'gene_id "xyz";transcript_id "xyzt2"; exon_number "2"\n']
1:3000-3200 ['gene_id "xyz";transcript_id "xy"; exon_number "2"\n']
太乱了,我想通过首先对术语进行分组来整理一下。即拉出 transcript_ids 并写成 transcript_id xyzt, xyzt2; 并最终重复那里的所有条款。
我的方法是先使用替换删除所有乱七八糟的字符
out=open('foo.txt','w')
with open('in.txt', 'r') as f:
for line in f:
tidyline = line.replace('[', "").strip()
tidyline = tidyline.replace(']', "").strip()
tidyline = tidyline.replace('"', "").strip()
tidyline = tidyline.replace("'", "").strip()
tidyline = tidyline.replace(",", "").strip()
out.write("%s\n" %tidyline)
然后使用 re 尝试匹配字符串并拉回此信息。我能做的,只是不确定如何写入文件以将它们保存在适当的行上。
import re
with open('foo.txt', 'r') as f:
for line in f:
result = re.findall('transcript_id\s(\w+)',line)
print result
['xyzt', 'xyzt2']
['xy']
我的想法是做这样的事情:
string= "transcript_id %s,%s" %(results[0], results[1])
file.write("%s\n" %string)
但是因为每行的所有列表都是不同的长度,所以不起作用。
你的最后一个问题(编写可变长度的列表)可以使用字符串的连接方法来解决。试试这个:
s = "transcript_id " + ",".join(results)
为了保存文件操作,您应该将输出文件的打开移动到 with 语句,以避免保留未关闭的文件:
with open('in.txt', 'r') as f, open('foo.txt','w') as out:
...
您真的需要中间步骤编写 foo.txt
还是这只是一个工作?
希望对您有所帮助。
您可以将所有结果放在一个列表中,然后浏览它:
transcript_id_list = []
with open('foo.txt', 'r') as f:
for line in f:
result = re.findall('transcript_id.*?(\w+)',line)
if result:
transcript_id_list.extend(result)
for item in transcript_id_list:
string= "transcript_id %s" % item
file.write("%s\n" % string)