2018-10-29 EDIT
टिप्पणियों के लिए धन्यवाद।
मैंने गति के संदर्भ में एक सीएसवी फ़ाइल में लाइनों की संख्या प्राप्त करने के लिए कई प्रकार के कोड का परीक्षण किया। सबसे अच्छा तरीका नीचे है।
with open(filename) as f:
sum(1 for line in f)
यहाँ कोड का परीक्षण किया गया है।
import timeit
import csv
import pandas as pd
filename = './sample_submission.csv'
def talktime(filename, funcname, func):
print(f"# {funcname}")
t = timeit.timeit(f'{funcname}("{filename}")', setup=f'from __main__ import {funcname}', number = 100) / 100
print('Elapsed time : ', t)
print('n = ', func(filename))
print('\n')
def sum1forline(filename):
with open(filename) as f:
return sum(1 for line in f)
talktime(filename, 'sum1forline', sum1forline)
def lenopenreadlines(filename):
with open(filename) as f:
return len(f.readlines())
talktime(filename, 'lenopenreadlines', lenopenreadlines)
def lenpd(filename):
return len(pd.read_csv(filename)) + 1
talktime(filename, 'lenpd', lenpd)
def csvreaderfor(filename):
cnt = 0
with open(filename) as f:
cr = csv.reader(f)
for row in cr:
cnt += 1
return cnt
talktime(filename, 'csvreaderfor', csvreaderfor)
def openenum(filename):
cnt = 0
with open(filename) as f:
for i, line in enumerate(f,1):
cnt += 1
return cnt
talktime(filename, 'openenum', openenum)
परिणाम नीचे था।
# sum1forline
Elapsed time : 0.6327946722068599
n = 2528244
# lenopenreadlines
Elapsed time : 0.655304473598555
n = 2528244
# lenpd
Elapsed time : 0.7561274056295324
n = 2528244
# csvreaderfor
Elapsed time : 1.5571560935772661
n = 2528244
# openenum
Elapsed time : 0.773000013928679
n = 2528244
अंत में, sum(1 for line in f)
सबसे तेज है। लेकिन इससे महत्वपूर्ण अंतर नहीं हो सकता है len(f.readlines())
।
sample_submission.csv
30.2MB है और इसमें 31 मिलियन कैरेक्टर हैं।
file_read
? क्या यह एक फाइल हैंडल है (जैसेfile_read = open("myfile.txt")
?