真菌の系統情報から、そのギルド(例: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さんの"õ"が書きだせなかったようである。
Comments