繁体   English   中英

为什么python用汉字写出来?

[英]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的更改。

感谢大家的帮助。 它现在已经解决了(基本上我是个白痴)......

我是如何修理它的:

  1. 安装了python3
  2. 将两个.txt文件重新保存为带有Unix(LF)换行符的Unicode UTF-8。
  3. 在脚本的开头将“#!/ usr / bin / env python”更改为“#!/ usr / bin / env python3”。
  4. 从命令行中运行python3 /Users/Sophie/Desktop/AttemptToRename/replacenames.py。

它奏效了!

我不确定是否所有这些步骤或其中只有一些是必要的,但它现在按计划工作。 再次感谢你的帮助。 现在要经历并投票! [编辑:显然我的选票没有显示,因为我的声誉很低......:/]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM