Самый эффективный способ разобрать большой .csv в python?

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

12
задан spagi 31 January 2012 в 21:13
поделиться