Pythonのdifflibモジュールに関する質問です.Python3.6を使っています.


https://docs.python.jp/3.5/library/difflib.html

これを使って文字列の類似度をだそうを思っており,


import difflib

a = '1234'
b = '1224'

ob = difflib.SequenceMatcher(isjunk=None, a=a, b=b)
print(ob.ratio())



というふうにしてみましたが,


>>> print(ob.ratio())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/ユーザ/anaconda/lib/python3.6/codecs.py", line 377, in write
self.stream.write(data)
TypeError: write() argument must be str, not bytes


というエラーが出ました.
ググっても何が原因なのかはよくわかりませんでした.
詳しい方に対処法をご教示いただけたらと思います.

回答の条件
  • 1人30回まで
  • 登録:
  • 終了:2017/09/26 10:59:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153

ポイント100pt

類似度を表示させたいのであれば、ratio() メソッドか、quick_ratio() などを使うのだと思います。
https://docs.python.jp/3.5/library/difflib.html#difflib.SequenceMatcher.ratio

a = '1234'
b = '1224'

ob = difflib.SequenceMatcher(None, a, b)
print(ob.ratio())
他5件のコメントを見る
id:midnightseminar

さらに謎ですが,その後,普通に最初のコードでも正常に表示されるようになりました.
よくわかりませんね・・・.ありがとうございました.

2017/09/26 01:22:07
id:midnightseminar

原因がわかりました.補足に追記して質問を閉じます.ありがとうございました.

2017/09/26 10:57:12

その他の回答0件)

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153ここでベストアンサー

ポイント100pt

類似度を表示させたいのであれば、ratio() メソッドか、quick_ratio() などを使うのだと思います。
https://docs.python.jp/3.5/library/difflib.html#difflib.SequenceMatcher.ratio

a = '1234'
b = '1224'

ob = difflib.SequenceMatcher(None, a, b)
print(ob.ratio())
他5件のコメントを見る
id:midnightseminar

さらに謎ですが,その後,普通に最初のコードでも正常に表示されるようになりました.
よくわかりませんね・・・.ありがとうございました.

2017/09/26 01:22:07
id:midnightseminar

原因がわかりました.補足に追記して質問を閉じます.ありがとうございました.

2017/09/26 10:57:12
id:midnightseminar

質問文を編集しました。詳細はこちら

id:midnightseminar

原因がわかりました.Python2の環境で使っていた,標準入出力のエンコーディングを指定する

sys.stdout = codecs.getwriter('utf_8')(sys.stdout)

sys.stdin = codecs.getreader('utf_8')(sys.stdin)

という設定を,スクリプトの始めのほうで実行していたのが余計でした.

これを削除したらエラーがでなくなりました.

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません