0
文字列が指定されたファイルに既に含まれているかどうかをチェックする機能があります。デュープチェック機能のエンコードエラー
関数は次のようになります。
def check_dupe(filename, word):
print(filename)
print(word)
with open(filename, 'rb', 0) as file, mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
if s.find(word.encode()) != -1:
print('dupe')
return True
私は次のエラーを取得する:
<_io.TextIOWrapper name='links' mode='r' encoding='ANSI_X3.4-1968'>
Traceback (most recent call last):
File "checker.py", line 277, in <module>
main()
File "checker.py", line 261, in main
text_links = [line.strip() for line in f if not check_dupe('completed_links', f)]
File "checker.py", line 261, in <listcomp>
text_links = [line.strip() for line in f if not check_dupe('completed_links', f)]
File "checker.py", line 240, in check_dupe
if s.find(word.encode()) != -1:
AttributeError: '_io.TextIOWrapper' object has no attribute 'encode'
私はこれを防ぐにはどうすればよいですか?
あなた 'word'を行います。私はそれは私はあなたが実際に文字列である、代わりにパラメータとして
line
を渡すために意図を推測_io.TextIOWrapper
返します(「ファイル名」)オープンで開かれたファイルであると思いますから来た ? ( 'check_dupe()'へのパラメータとして渡されたもの)。私はそれが文字列だと思いますが、stackstraceは '_io.TextIOWrapper'であることを示しています – Guillaume
その他の質問:あなたのファイルはテキストファイルかバイナリコンテンツですか?そして、あなたが 'mmap'を使う特別な理由はありますか? – Guillaume
@Guillaume 100%文字列です。 'type()'でチェックしました。はい、単語が引数として渡されます。私がmmapを使用している理由は、他の方法より速いことがわかったからです。ファイルは通常のテキストファイルですが、バイナリとして読み込まれます。あなたが単語のためにファイルをチェックするためのより速い方法を持っているなら、私は提案に開いています。 – rhillhouse