这是我关于Stack Overflow的第一个问题,所以如果我的问题格式不正确,我想先道歉。我对编码没有特别的经验,但我正在努力解决我的工作中的特定问题。
我正在尝试替换大型fasta文件的标头(用于对齐DNA序列)。我有一个包含fasta alignment(alignment.txt)的txt文件,其内容如下:
>418035201_b1_168_m12_gag__Assembly_8
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAA......
>418035201_b1_168_m12_gag__Assembly_19
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAA......
我还有一个包含所需名称的文本文件(newheaders.txt),其内容如下:
>418035201_pM_s38_B168_m12_gag_c08_M13F_X00_consensus
>418035201_pM_s38_B168_m12_gag_c19_M13F_X00_consensus
....
我正在尝试使用newheaders.txt文件中的新标头替换alignment.txt文件中的标题(以#39;>'开头的行)。
我有一个包含以下内容的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'打印到控制台,它正确打印。即。
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAAATTAGATGCGTGGGAGAA....
所以我认为它必须与它的写作方式有关。
如果有人能够帮助我或提供一些见解,我将不胜感激,谢谢。
[编辑:现在解决了。见下文。谢谢大家!]
答案 0 :(得分:0)
似乎Python支持"编码" open()函数中的参数覆盖默认编码格式。如果您知道输入和输出文件的正确编码是什么,您应该能够通过添加如下内容来更正它(在您的情况下将实际编码替换为正确的编码):
newnames= open('newheaders.txt','r', encoding='ascii')
newfasta= open('newfasta.txt', 'w', encoding='utf_8')
PS:似乎问题是由于Python 3默认使用Unicode进行文本文件I / O,这是对Python 2.x的更改。
答案 1 :(得分:0)
感谢各位的帮助。它现在已经解决了(基本上我是个白痴)......
我如何解决它:
它有效!
我不确定是否所有这些步骤或其中只有一些是必要的,但它现在按计划运行。再次感谢你的帮助。现在要经历并投票! [编辑:显然我的选票没有显示,因为我的声誉很低......:/]