这是我的第一个关于Stack Overflow的问题,所以如果我的问题格式不正确,我想首先道歉。我对编码没有特别的经验,但我正在努力解决与我的工作有关的特定问题。为什么python用汉字写出来?
我想替换一个大的fasta文件(用于比对DNA序列)的标题。我有一个包含FASTA对准txt文件(alignment.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
䄊䝔䝇䝔䝃䝁䝁䝃䍔䝁䅔呔䅁呇䝇䝇䅇䅁呁䅔䅇䝔䅃䝔䝇䝁䅁䅁呔....
“线”正在从罗马字符改为中国字符。它不应该是中文字符,我不能为我的生活工作,为什么发生这种情况!
将'行'打印到控制台时,它会正确打印。即
所以我相信它一定是写出来的。
如果有人能够帮助我或提供一些见解,我将不胜感激,谢谢。
[编辑:现在解决了。见下文。谢谢大家!]
我的猜测是,也许你是解释文件为UTF-16,使两对字节是解释为单个字符。 –
代码在我的系统上运行,直接通过'python2 test.py'直接运行,没有任何IDE或任何东西。你在使用什么操作系统? Tobias_k说的有道理,我不明白为什么会发生这种情况,除非系统运行UTF-16('/ etc/locale.conf'和'locale-gen'来生成UTF-16)的默认localeconf。如果您正在运行Linux,请在控制台中向我们提供'locale -a'的输出。 – Torxed
我在MacOS Sierra 10.12上运行它。我意识到它正在运行python 2.7,所以我刚刚安装了python3。但是现在,我收到以下错误,当我尝试运行它: “语法错误:无效的语法 >>> /Users/Sophie/Desktop/AttemptToRename/replacenames.py 文件””,1号线 /用户/苏菲/桌面/ AttemptToRename/replacenames.py ^ 语法错误:无效的语法 >>> “ –
Sophie