使用python将三列文件写入新文本文件
我正在从一个大的.gtf文件中读取数据。下面是它的代码:使用python将三列文件写入新文本文件,python,python-3.x,bioinformatics,Python,Python 3.x,Bioinformatics,我正在从一个大的.gtf文件中读取数据。下面是它的代码: fname="gencode.v19.annotation.gtf" for line in open(fname,'r'): if not line.startswith('##'): col1=line.split()[0] col3=line.split()[2] col4=line.split()[3] col5=line.split()[4]
fname="gencode.v19.annotation.gtf"
for line in open(fname,'r'):
if not line.startswith('##'):
col1=line.split()[0]
col3=line.split()[2]
col4=line.split()[3]
col5=line.split()[4]
if "protein_coding" in line and col3=="exon":
data = col1,col4,col5
results=list(data)
print(results)
dataFile = open('results.txt','w')
for list in results:
dataFile.writelines(results)
dataFile.close()
在空闲状态下打印的结果如下所示:
['chr1', '120461029', '120461176']
['chr1', '120460288', '120460385']
['chr1', '120454176', '120459317']
['chr1', '120466260', '120466528']
['chr1', '120465118', '120465401']
['chr1', '120479905', '120480086']
['chr1', '120477890', '120478227']
['chr1', '120611948', '120612240']
['chr1', '120547952', '120548211']
(但是有很多……)
我的问题是,为什么我当前的代码无法将所有数据打印到新的文本文件中?我应该如何编写代码,使其不会先打印整个内容,然后再将其导入新文件?如何将其自动导入新文本文件
任何帮助都将不胜感激!谢谢大家! 为避免打印结果,请对打印功能进行注释:
#print(results)
然后,写入文件的代码片段出现问题:
for list in results:
dataFile.writelines(results)
writelines()需要一个字符串列表,您不必自己迭代字符串列表(结果)
使用write()并迭代:
for line in results:
dataFile.write(line)
或正确使用writelines:
dataFile.writelines(results)
您在for循环中不断重新分配
结果
,因此在您开始编写文件时,它只包含最后一位数据。您可能希望将结果创建为一个列表,并在运行时附加数据
fname="gencode.v19.annotation.gtf"
results = []
for line in open(fname,'r'):
if not line.startswith('##'):
col1=line.split()[0]
col3=line.split()[2]
col4=line.split()[3]
col5=line.split()[4]
if "protein_coding" in line and col3=="exon":
data = col1,col4,col5
results.append(data)
print(data)
with open('results.txt','w') as datafile:
for data in results:
dataFile.write(str(data)) # Fix this: I dont know what formatting you want
或者,在for循环中写入:
fname="gencode.v19.annotation.gtf"
with open('results.txt','w') as datafile:
results = []
for line in open(fname,'r'):
if not line.startswith('##'):
col1=line.split()[0]
col3=line.split()[2]
col4=line.split()[3]
col5=line.split()[4]
if "protein_coding" in line and col3=="exon":
data = col1,col4,col5
dataFile.write(str(data)) # Fix this: I dont know what formatting you want
print(data)
代码现在只向
结果
写出最后一个赋值。您需要在循环的每次迭代中写入(或附加)到输出文件。或者,您可以通过初始化空数组来分离代码的读写部分,以通过for循环存储所有结果
还有几点建议:
a) 避免使用变量名list
,因为在Python中这是一个受保护的词
b) 使用with
语法打开文件,因为这样会在文件使用结束时自动关闭文件
c) 我将拆分
行一次,然后在一行中分配变量名
with open('./results.txt', 'w') as outfile:
with open('./gencode.v19.annotation.gtf', 'r') as infile:
for line in infile:
col1, col2, col3, col4, col5 = line.split()
if 'protein_coding' in line and col3=='exon':
outfile.write(','.join([col1, col4, col5]))
谢谢,但是没有任何数据被写入我的新文件,所以我不知道代码还有什么问题。非常感谢。这已经奏效了!谢谢x10000