[英]Why is python writing out in Chinese characters?
这是我关于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文件中的标题(以'>'开头的行)。
我有一个包含以下内容的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'打印到控制台时,它会正确打印。 即
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAAATTAGATGCGTGGGAGAA....
所以我认为它必须与它的写作方式有关。
如果有人能够帮助我或提供一些见解,我将非常感谢,谢谢。
[编辑:现在解决了。 见下文。 感谢大家!]
看来Python支持open()函数中的“encoding”参数来覆盖默认的编码格式。 如果您知道输入和输出文件的正确编码是什么,您应该能够通过添加如下内容来更正它(在您的情况下将实际编码替换为正确的编码):
newnames= open('newheaders.txt','r', encoding='ascii')
newfasta= open('newfasta.txt', 'w', encoding='utf_8')
PS:似乎问题是由于Python 3默认使用Unicode进行文本文件I / O,这是对Python 2.x的更改。
感谢大家的帮助。 它现在已经解决了(基本上我是个白痴)......
我是如何修理它的:
它奏效了!
我不确定是否所有这些步骤或其中只有一些是必要的,但它现在按计划工作。 再次感谢你的帮助。 现在要经历并投票! [编辑:显然我的选票没有显示,因为我的声誉很低......:/]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.