状況:mmapを使用してRAMにロードされたCVD(ClamAV Virus Database)ファイルがあります。 CVDファイルの各行の形式は、CSVファイル( ':'で区切られたファイル)の形式と同じです。以下のコードの抜粋です:RAMからCSVファイルを読み取る
def mapping():
with open("main.cvd", 'rt') as f:
global mapper
mapper = mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ)
csv.register_dialect('delimit', delimiter=':', quoting=csv.QUOTE_NONE)
def compare(hashed):
for row in csv.reader(mapper, dialect='delimit'):
if row[1] == hashed:
print('Found!')
問題:どのように私はテキストとしてCSVファイルを読み取るか、メモリにロードされています:実行すると、それは誤り_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
質問を返しますか?
追加情報1:私はそれがエラーをスローし、StringIO
を使用してみましたがTypeError: initial_value must be str or None, not mmap.mmap
追加情報2:私は、ファイルへのアクセスを高速化するために、RAMにあるように、ファイルを必要と私はそれをラインを読んで時間を犠牲にすることはできませんラインによってcsv.reader
コンストラクタへのそのようなreadline()
代わりに(( "main.cvd"、 'b')をf:))として試してみましたか? – amrit
どちらも動作しません。 –
あなたは何をしようとしていますか? 'csv.reader' *は、' readline'を使って行ごとに読むのと同じように動作するイテレータを返します。* –