我有一个选项卡分隔的文件,看起来像这样:
chrom start stop strand isoform mu_codon mut_codon2 more_info
chr22 43089055 43089055 - NM_017436 C 903delC
chr22 43089715 43089717 - NM_017436 CTT 241_243delTTC
chr22 43089657 43089657 - NM_017436 G 301delG
chr12 53701873 53701875 - NM_015665 TTC A 1292_1294delTTCinsA
我编写了一个脚本来计算mut\u codon2列中的字符数,并将信息输出到一个文件中
这是我的剧本:
import csv
OutputFileName = "indels_mut_count2.txt"
OutputFile = open(OutputFileName, 'w')
with open("indels_mut_removed.txt") as f:
for line in f:
columns = line.split('\t')
chrom = columns[0]
start = columns[1]
stop = columns[2]
strand = columns[3]
isoform = columns[4]
codon1 = columns[5]
codon2 = columns[6]
info = columns[7]
length = len(codon1)
length2 = len(codon2)
OutputFile.write(''+chrom+'\t'+str(start)+'\t'+str(stop)+'\t'+strand+'\t'+isoform+'\t'+codon1+'\t'+codon2+'\t'+str(length)+'\t'+str(length2)+'\t'+info+'\n')
我几乎可以肯定我的问题与OutputFile.write()
有关,因为输出的文件在我想要输出的每一行后面都添加了空行。举个例子:
chrom start stop strand isoform mu_codon mut_codon2 8 10 more_info
chr22 43089055 43089055 - NM_017436 C 1 1 903delC
chr22 43089715 43089717 - NM_017436 CTT 3 1 241_243delTTC
chr22 43089657 43089657 - NM_017436 G 1 1 301delG
但是,我也得到一个错误,内容如下:
info = columns[7]
IndexError: list index out of range
我不确定我做错了什么。有什么建议吗
csv
(正如Arkanosis所建议的那样)是一个很好的选择;否则:要使用csv,可以执行以下类似操作:
鉴于此输入:
生成此输出:
我建议您使用
csv.csvreader
而不是手动拆分行。拆分不处理转义和其他一些事情,因此csv.csvreader
更安全作为参考,您遇到这个问题是因为您没有剥离每行末尾的
\n
,例如使用rstrip()
。然后将其写入输出,并添加一个(第二个)\n
,在调用write()
时将其放入自己的位置不过,还是用
csv.csvreader
代替相关问题 更多 >
编程相关推荐