gpt4 book ai didi

python - 在 python 中解析大型 .csv 的最有效方法?

转载 作者:太空狗 更新时间:2023-10-29 17:41:35 30 4
gpt4 key购买 nike

我尝试查看其他答案,但我仍然不确定执行此操作的正确方法。我有许多非常大的 .csv 文件(每个文件可能有 1 GB),我想先获取它们的列标签,因为它们并不完全相同,然后根据用户偏好使用某些标准提取其中一些列.在开始提取部分之前,我做了一个简单的测试,看看解析这些文件的最快方法是什么,这是我的代码:

def mmapUsage():
start=time.time()
with open("csvSample.csv", "r+b") as f:
# memory-mapInput the file, size 0 means whole file
mapInput = mmap.mmap(f.fileno(), 0)
# read content via standard file methods
L=list()
for s in iter(mapInput.readline, ""):
L.append(s)
print "List length: " ,len(L)
#print "Sample element: ",L[1]
mapInput.close()
end=time.time()
print "Time for completion",end-start

def fileopenUsage():
start=time.time()
fileInput=open("csvSample.csv")
M=list()
for s in fileInput:
M.append(s)
print "List length: ",len(M)
#print "Sample element: ",M[1]
fileInput.close()
end=time.time()
print "Time for completion",end-start

def readAsCsv():
X=list()
start=time.time()
spamReader = csv.reader(open('csvSample.csv', 'rb'))
for row in spamReader:
X.append(row)
print "List length: ",len(X)
#print "Sample element: ",X[1]
end=time.time()
print "Time for completion",end-start

我的结果:

=======================
Populating list from Mmap
List length: 1181220
Time for completion 0.592000007629

=======================
Populating list from Fileopen
List length: 1181220
Time for completion 0.833999872208

=======================
Populating list by csv library
List length: 1181220
Time for completion 5.06700015068

所以看起来大多数人使用的 csv 库确实比其他库慢很多。也许稍后当我开始从 csv 文件中提取数据时它会更快,但我还不能确定。在我开始实现之前有什么建议和提示吗?非常感谢!

最佳答案

正如其他几次指出的那样,前两种方法没有进行实际的字符串解析,它们只是一次读取一行而不提取字段。我想 CSV 中看到的大部分速度差异都是由于此造成的。

如果您包含任何可能包含更多“标准”CSV 语法而不仅仅是逗号的文本数据,那么 CSV 模块将是无价的,尤其是当您从 Excel 格式读取数据时。

如果您只有像“1,2,3,4”这样的行,那么简单拆分可能没问题,但是如果您有像“1,2,'Hello, my name\'s fred'" 你会疯狂地试图解析它而没有错误。

CSV 还将透明地处理诸如引号字符串中间的换行符之类的事情。没有 CSV 的简单 for..in 会遇到问题。

CSV 模块在我读取 unicode 字符串时一直运行良好,如果我这样使用的话:

f = csv.reader(codecs.open(filename, 'rU'))

导入包含 unicode 的数千行文件、带引号的字符串、带引号的字符串中间的换行符、末尾缺少字段的行等都非常强大。所有这些都具有合理的读取时间。

我会先尝试使用它,如果您真的需要额外的速度,我只会在它之上寻求优化。

关于python - 在 python 中解析大型 .csv 的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087039/

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