top of page
takaohi

FUNGuildのエラー"UnicodeEncodeError: 'cp932' codec can't encode character~"の対処法

真菌の系統情報から、そのギルド(例:Saprotroph/腐生菌)を調べるのに便利なツールFUNGuildがある。


詳細な使い方は今回は割愛するとして、出たエラーとその対処法について書く。


〈エラーについて〉

私は、Windowsに入れたPython3で、上記のGitHubページ内にある以下のコードを動かした。xxxxは自分のディレクトリやファイルに対応している。

python FUNGuild.py guild -taxa xxxx/xxxx.txt

すると、以下のエラーが出た。

UnicodeEncodeError: 'cp932' codec can't encode character '\xf5' in position 187: illegal multibyte sequence

一応、アウトプットファイルは書き出されたが、10209個あったASVに対して、途中の1504個目で終わっていたのでおかしいと思った。


ちなみに1505個目のASVの分類は、Fungi;Ascomycota;Dothideomycetes;Pleosporales;Parabambusicolaceae;Paratrimmatostroma;kunmingensisで、これより前には出てきていない。


おそらくこのASVの情報をアウトプットファイルに書き込む際にエンコーディングエラーが発生したと考えられる。


どうやら、Windowsの日本語に対応したcp932という規格では、unicodeにおける"\xf5"という文字を書けないようである。


そこで、FUNGuild.pyを編集して、エンコーディングを指定することにした。


〈元々のFUNGuild.pyの214~216行目〉

with open(output_file, 'w') as f:
        for line in output:
            f.write('%s\n' % '\t'.join([str(i) for i in line]))

〈編集後。自分はFUNGuild_edit.pyとして保存した〉

with open(output_file, 'w', encoding='utf-8') as f:
        for line in output:
            f.write('%s\n' % '\t'.join([str(i) for i in line]))

これでうまくいった!(全部のASVの情報がアウトプットファイルに書き込まれた)


試してはいないが、他に考えられる対処法として、WSL UbuntuにPythonを入れ、そこでコマンドを走らせるなどしてもいいかもしれない。


〈おまけ〉

エンコーディングをutf-8にして出してみたら、上記のエラーの原因であった1505個目のASVのcitationSourceの情報のところで、"Põlme S, et al. 2020"の著者のPõlmeさんの"õ"が書きだせなかったようである。

閲覧数:20回0件のコメント

Comments


bottom of page