2017-03-15 14 views
1

これはStack Overflowに関する私の最初の質問ですので、私の質問が正しくフォーマットされていない場合、まず謝りたいと思います。私はコーディングに関して特に経験はありませんが、私の仕事で特定の問題を解決しようとしています。なぜPythonが中国語文字で書き出していますか?

(DNA配列のアライメントに使用される)大きなファーストファイルのヘッダーを置き換えようとしています。私はこのような内容を有するFASTAアライメント(alignment.txt)を含むTXTファイルを持っている:

>418035201_b1_168_m12_gag__Assembly_8 
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAA...... 

>418035201_b1_168_m12_gag__Assembly_19 
ATGGGTGCGAGAGCGTCAGTATTAAGTGGGGGAAA...... 

Iはまた、このような内容を持つ所望の名前(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 
䄊䝔䝇䝔䝃䝁䝁䝃䍔䝁䅔呔䅁呇䝇䝇䅇䅁呁䅔䅇䝔䅃䝔䝇䝁䅁䅁呔.... 

「行」は、中国へのローマ字から変更されています文字。それは漢字ではいけません。私はなぜこのようなことが起こっているのかは分かりません。

「行」がコンソールに印刷されると、正しく印刷されます。私。

だから私はそれが書いている方法とは関係があると信じています。

誰かが私にこれを手伝ったり、いくつかの洞察力を与えてくれたら、私は大いに感謝します。ありがとうございます。

[編集:今解決されました。下記参照。みんなありがとう!]

+2

私の推測では、ファイルをUTF-16と解釈して2バイトのペア単一の文字として解釈されます。 –

+0

コードは私のシステムで動作し、IDEや何もせずに 'python2 test.py'を実行します。これを実行しているOSは何ですか? tobias_kが言っていることは、あなたのシステムがUTF-16のデフォルトのlocaleconf( '/ etc/locale.conf'と' locale-gen'を生成するために)を実行していない限り、なぜ起こるのかわかりません。 Linuxを実行している場合、コンソールに 'locale -a'の出力を与えてください。 – Torxed

+0

私はMacOS Sierra 10.12で実行しています。私はPython 2.7を実行していたので、python3をインストールしました。 :私はそれを実行しようとすると、しかし、今、私は次のエラーを取得しています「にSyntaxError:無効な構文を >>> /Users/Sophie/Desktop/AttemptToRename/replacenames.py ファイル」」、行1 /ユーザ/ソフィー/デスクトップ/ AttemptToRename/replacenames.py ^ にSyntaxError:無効な構文 >>> 「 – Sophie

答えて

0

Pythonは、デフォルトのエンコーディング形式を無効にするためにopen()関数の "encoding"パラメータをサポートしているようです。

newnames= open('newheaders.txt','r', encoding='ascii') 
newfasta= open('newfasta.txt', 'w', encoding='utf_8') 

PS:あなたの入力ファイルと出力ファイルの正しいエンコーディングが何であるかを知って提供するには、次の(あなたのケースでは正しいもので、実際のエンコーディングを置き換える)のようなものを追加することによって、それを修正することができるはずです:問題はPython 3のため、Python 2.xからの変更であるテキストファイルI/OのデフォルトでUnicodeを使用しているためです。

+0

私は私がインストールのpython 3のpython 2.7を使用していたが、私は、スクリプトを実行しようとすると、今すぐにSyntaxErrorを受け付けております実現。 ""、行1 /Users/Sophie/Desktop/AttemptToRename/replacenames.py ^ にSyntaxError:無効な構文 >>> 「 私は1行目に無効であるものを今うまくできないのですか? – Sophie

0

皆様、ご協力いただきありがとうございます。それは、今(基本的に私は馬鹿だ)解決しています...私はそれを固定する方法

  1. インストール済みのpython3
  2. のUnicode UTF-8のUnixと(など.txtファイルの再保存の両方LF)改行。
  3. スクリプトの先頭に「#!/ usr/bin/env python」を「#!/ usr/bin/env python3」に変更しました。
  4. Ran python3 /Users/Sophie/Desktop/AttemptToRename/replacenames.pyコマンドラインから。

これは機能しました。

これらのステップがすべて必要なのか、それらのうちのいくつかだけが必要なのかどうかは分かりませんが、現在は計画通りに動作しています。あなたのご親切に感謝します。今すぐ投票し、今すぐ投票しよう! [編集:明らかに、私の投票結果は低いですから...:/]

関連する問題