Я пытался посмотреть на другие ответы, но я все еще не уверен, как это сделать.
У меня есть несколько очень больших файлов .csv (каждый может быть гигабайтом), и я хочу сначала получить метки их столбцов, потому что они не все одинаковые, а затем в соответствии с предпочтениями пользователя извлечь некоторые из этих столбцов с некоторыми критериями ,
Перед тем, как приступить к извлечению, я выполнил простой тест, чтобы увидеть, какой самый быстрый способ проанализировать эти файлы, и вот мой код:
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, но я пока не уверен в этом.
Любые предложения и советы, прежде чем я начну внедрять?
Большое спасибо!