제 목적으로 실제로 행을 사용하기 전에 (CSV) 파일의 행 수를 알아야합니다. 내가 봤 거든 그 설명서는 내가 반복기 (CSV.reader)를 두 번 (첫 번째 계산에 대한 두 번째와 행에 대한 작업)를 작성해야한다는 것을 발견했다. 이것이 유일한 방법인가, 아니면 트릭을 수행하는 까다로운 방법이 있을까요?파이썬을 사용한 CSV 조작
답장을 보내 주셔서 감사합니다.
제 목적으로 실제로 행을 사용하기 전에 (CSV) 파일의 행 수를 알아야합니다. 내가 봤 거든 그 설명서는 내가 반복기 (CSV.reader)를 두 번 (첫 번째 계산에 대한 두 번째와 행에 대한 작업)를 작성해야한다는 것을 발견했다. 이것이 유일한 방법인가, 아니면 트릭을 수행하는 까다로운 방법이 있을까요?파이썬을 사용한 CSV 조작
답장을 보내 주셔서 감사합니다.
:
from csv import reader
def proceed(size):
with open(filename) as f:
data = list(csv.reader(f))
if len(data) > size:
return
else:
for line in data:
#do action
weights = {'user1': 4, 'user2': 5}
for k,v in weights.iteritems():
proceed(v)
또는
당신이 매우 큰 파일이있을 때 경우에 @georgesl에 의해 제안 :def proceed(size):
if sum(1 for row in csv.reader(open(filename))) > size:
return
else:
for line in csv.reader(open(filename)):
#do action
파일의 적절한 크기는 얼마입니까? 100KB는 어떻습니까? – alexvassel
파일 크기가 큰 경우'row_count = sum (csv.reader (open ('filename.csv'))) 행의 행이 1 인 경우)은 크기에 더 좋습니다 – lucasg
@alexvassel 적절한 파일 크기는 혼수 상태에 컴퓨터를 넣으십시오 - 1GB CSV 파일은 아마도 최신 기계에 스트레스를주지 않을 것입니다 ... –
내가 파일을 읽지 않고 방법을 알고하지 않습니다,하지만 당신의 병목 현상은 위치에 따라 그냥 N 라인을 처리 할 수 있으며,이 경우 더 예를 들어, 그것들을 버리 :
count = 0
for line in reader:
count += 1
if count > N: # Over the limit so stop processing
break
else:
processed_data += process(line)
else:
# This block only runs if the loop completed naturally, i.e. count <= N
return processed_data
process(line)
이 비싼 경우 질문에 설명 된대로 두 개의 루프를 사용하는 것이 가장 좋습니다. 당신이 시도 할 수있는 것보다 파일이 매우 큰 수없는 경우
먼저 우리가 이해할 필요를 왜 그들과 함께 작업하기 전에 행 번호가 필요합니까 –
행 수> N (N은 모든 사용자마다 다름)이면 파일을 처리하지 않아야합니다. – alexvassel
적어도 내게는이 작업을 수행 할 수있는 다른 방법이없는 것처럼 보입니다. 모든 경우에 모든 행을 읽고 모든 행을 진행하는 것은 다른 일입니다. 따라서 체크인보다 크기를 모두 읽으라고 권하고 있습니다. lines - 그렇지 않으면 다음 파일로 전환합니다. –