这是我关于堆栈溢出的第一个问题,所以如果我的问题格式不正确,我想先道歉。我不是特别有经验的编码,但我正在努力解决一个具体的问题,我的工作。在
我正在尝试替换一个大的fasta文件的头文件(用于对齐DNA序列)。我有一个包含fasta对齐的txt文件(对齐.txt),其内容如下:
>418035201_b1_168_m12_gag__Assembly_8
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAA......
>418035201_b1_168_m12_gag__Assembly_19
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAA......
我还有一个包含所需名称的文本文件(新标题.txt),其内容如下:
^{pr2}$我正在尝试替换对齐.txt包含新标题的文件新标题.txt文件。在
我有一个包含以下内容的python脚本:
#!/usr/bin/env python
fasta= open('alignment.txt','r')
newnames= open('newheaders.txt','r')
newfasta= open('newfasta.txt', 'w')
for line in fasta:
if line.startswith('>'):
newname= newnames.readline()
newfasta.write(newname)
else:
newfasta.write(line)
print line
fasta.close()
newnames.close()
newfasta.close()
运行此程序时,我得到以下输出:
>418035201_pM_s38_B168_m12_gag_c08_M13F_X00_consensus
䄊䝔䝇䝔䝃䝁䝁䝃䍔䝁䅔呔䅁呇䝇䝇䅇䅁呁䅔䅇䝔䅃䝔䝇䅁䅁䅁呔....
>418035201_pM_s38_B168_m12_gag_c19_M13F_X00_consensus
䄊䝔䝇䝔䝃䝁䝁䝃䍔䝁䅔呔䅁呇䝇䝇䅇䅁呁䅔䅇䝔䅃䝔䝇䝁䅁䅁呔....
“line”正在从罗马字符改为中文字符。它不应该是汉字,我也不知道为什么会这样!在
当“line”被打印到控制台时,它会正确地打印它。一、 e
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAAATTAGATGCGTGGGAGAA....
所以我相信这一定和它的写作方式有关。在
如果有人能在这方面帮助我或提供一些见解,我将不胜感激,谢谢。在
[编辑:现在解决。见下文。谢谢大家!]在
Python似乎支持open()函数中的“encoding”参数来覆盖默认的编码格式。如果您知道输入和输出文件的正确编码是什么,您应该能够通过添加以下内容来更正它(在您的情况下,用正确的编码替换实际的编码):
PS:问题似乎是由于Python3在默认情况下对文本文件I/O使用Unicode,这是对Python2.x的一个更改
谢谢大家的帮助。现在解决了(本质上我是个白痴)。。。在
我如何修复它:
而且成功了!在
我不确定是否所有这些步骤都是必要的,或者只是其中的一部分,但它现在正在按计划工作。再次感谢你的帮助。现在就去投票![编辑:显然我的支持票没有显示出来,因为我的名声很低。。。:/]
相关问题 更多 >
编程相关推荐