這是我的第一個關於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