情况:我使用 mmap 将 CVD(ClamAV 病毒数据库)文件加载到 RAM 中。CVD 文件中每一行的格式与 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.Error: iterator should return strings, not bytes (did you open the file in text mode?)
问题:如何将 CSV 文件作为已加载到内存的文本读取?
附加信息1:我尝试过使用StringIO
,它会抛出错误TypeError: initial_value must be str or None, not mmap.mmap
附加信息 2:我需要将文件放在 RAM 中以便更快地访问文件,并且我不能牺牲使用以下函数逐行读取它的时间readline()