CSV 파일을 읽기 위해 Python (Django Framework)을 사용하고 있습니다. 보시다시피이 CSV에서 2 줄만 가져옵니다. 내가하려는 것은 CSV의 총 행 수를 변수에 저장하는 것입니다.
총 행 수는 어떻게 얻을 수 있습니까?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
나는 시도했다 :
len(fileObject)
fileObject.length
답변
행 수를 계산해야합니다.
row_count = sum(1 for row in fileObject) # fileObject is your csv.reader
sum()
생성기 표현식과 함께 사용 하면 전체 파일을 메모리에 저장하지 않고도 효율적인 카운터를 만들 수 있습니다.
시작하기 위해 이미 2 개의 행을 읽었다면이 2 개 행을 합계에 추가해야합니다. 이미 읽은 행은 계산되지 않습니다.
답변
2018-10-29 수정
의견을 보내 주셔서 감사합니다.
속도 측면에서 csv 파일의 줄 수를 얻기 위해 여러 종류의 코드를 테스트했습니다. 가장 좋은 방법은 다음과 같습니다.
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이고 3,100 만 자입니다.
답변
이를 수행하려면 여기에 내 예제와 같은 코드가 필요합니다.
file = open("Task1.csv")
numline = len(file.readlines())
print (numline)
이것이 모두에게 도움이되기를 바랍니다.
답변
위의 몇 가지 제안은 csv 파일의 줄 수를 계산합니다. 그러나 일부 CSV 파일에는 줄 바꿈 문자가 포함 된 인용 문자열이 포함됩니다. MS CSV 파일은 일반적으로 \ r \ n으로 레코드를 구분하지만 따옴표로 묶인 문자열 내에서 \ n 만 사용합니다.
이와 같은 파일의 경우 파일에서 텍스트 줄 (개행으로 구분)을 세면 결과가 너무 커집니다. 따라서 정확한 카운트를 위해 csv.reader를 사용하여 레코드를 읽어야합니다.
답변
먼저 열린 상태로 파일을 열어야합니다.
input_file = open("nameOfFile.csv","r+")
그런 다음 csv.reader를 사용하여 csv를 엽니 다.
reader_file = csv.reader(input_file)
마지막으로 ‘len’명령으로 행 수를 가져올 수 있습니다.
value = len(list(reader_file))
총 코드는 다음과 같습니다.
input_file = open("nameOfFile.csv","r+")
reader_file = csv.reader(input_file)
value = len(list(reader_file))
csv 파일을 재사용하려면 input_file.fseek (0)을 만들어야합니다. reader_file에 대한 목록을 사용하면 모든 파일을 읽고 파일의 포인터가 위치를 변경하기 때문입니다.
답변
row_count = sum(1 for line in open(filename))
나를 위해 일했습니다.
참고 : sum(1 for line in csv.reader(filename))
첫 번째 줄의 길이를 계산하는 것 같습니다 .
답변
numline = len(file_read.readlines())