gpt4 book ai didi

Python:mmap 文件上的 csv.reader 工作不正确

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:39 25 4
gpt4 key购买 nike

我需要用 Python 解析一个相当大的 csv 文件。为此,我使用 csv(文件包含引号),并且我想使用多重处理来并行此过程。每个进程只会读取 mmap 文件对象中的行。但是在实现这种方法时,我遇到了下一个问题(我知道 python with 语句,这只是一个演示):

import csv


f = open('temp', 'r+b')

reader = csv.reader(f)
reader.next()

f.close()

输出:

['1000415037534300', '2013-07-14 13:25:13.000000', 'request', '281', 'Camino', 'LG']

没错,但请考虑这个例子:

import csv
import mmap


f = open('temp', 'r+b')
m = mmap.mmap(f.fileno(), 0)

reader = csv.reader(m)
reader.next()
reader.next()
reader.next()

m.close()
f.close()

打印

['1']
['0']
['0']

换句话说,它从文件中读取一个字节。我必须使用 mmap 因为没有其他方法可以允许多个进程使用同一文件。问题是,为什么 csv.reader 对 mmap 对象的行为如此奇怪? mmap 对象与标准 python 文件对象具有相同的 api,因此 csv.reader 应该可以正常工作。

最佳答案

您可以将 iter 与 readline 一起使用来读取每一行:

 reader = csv.reader(iter(m.readline, ""))

如果您迭代m,您将一次获得一个字符,因此将 m 传递给阅读器将表现出相同的行为

关于Python:mmap 文件上的 csv.reader 工作不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com