人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


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

●質問者: midnightseminar
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●100ポイント ベストアンサー

類似度を表示させたいのであれば、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())

midnightseminarさんのコメント
すいません,貼り付けるものをまちがえました. おっしゃる通りで,ratio()を使ったのですが,以下のようになります・・・・. >>> import difflib >>> >>> a = '1234' >>> b = '1224' >>> >>> ob = difflib.SequenceMatcher(isjunk=None, a=a, b=b) >>> 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 >>>

midnightseminarさんのコメント
Anacondaから入れているSpyderというIDEで使ってるのですが,ターミナルからPython3を起動して打てばふつうに動くので,コードの問題ではなく,Spyderの問題でしょうか・・・.

a-kuma3さんのコメント
こんな感じではどうでしょう。 >|python| print(str(ob.ratio())) ||<

midnightseminarさんのコメント
いけました!!!なぜでしょう・・・

a-kuma3さんのコメント
よく分からないですけど、print() が string しか受け付けなくなっちゃってるんですね。 なので、str() で文字列に変換してみた、的な <tt>:-)</tt>

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

midnightseminarさんのコメント
原因がわかりました.補足に追記して質問を閉じます.ありがとうございました.

質問者から

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

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

という設定を,スクリプトの始めのほうで実行していたのが余計でした.
これを削除したらエラーがでなくなりました.


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ