본문 바로가기
파이썬

파이썬 csv 파일의 N 번째 줄에 액세스하는 가장 좋은 방법

by º기록 2020. 12. 3.
반응형

CSV 파일의 N 번째 줄에 액세스해야합니다.

내가 한 일은 다음과 같습니다.

import csv

the_file = open('path', 'r')
reader = csv.reader(the_file)

N = input('What line do you need? > ')
i = 0

for row in reader:
    if i == N:
        print("This is the line.")
        print(row)
        break

    i += 1

the_file.close()

...하지만 이것은 최적의 느낌이 아닙니다. 정확성을위한 편집 : 파일이 큰 경우 모든 행을 통과하지 않고 전체 파일을 메모리에로드하지 않아도됩니다.

reader [N] 과 같은 것이 있기를 바라지 만 찾지 못했습니다.

답변 편집 :이 줄 (선택한 답변에서 나옴)은 내가 찾던 것입니다.

next(itertools.islice(csv.reader(f), N, None)

 

해결 방법

 

약간의 차이는 있지만 카운터 변수를 직접 만드는 것보다 enumerate 를 사용하는 것이 약간 더 깔끔합니다.

for i, row in enumerate(reader):
    if i == N:
        print("This is the line.")
        print(row)
        break

또한 이러한 유형의 시나리오를 위해 설계된 itertools.islice 를 사용할 수 있습니다. 전체를 메모리로 읽지 않고 이터 러블의 특정 슬라이스에 액세스합니다. 원하지 않는 행을 반복하는 것보다 조금 더 효율적이어야합니다.

with open(path, 'r') as f:
    N = int(input('What line do you need? > '))
    print("This is the line.")
    print(next(itertools.islice(csv.reader(f), N, None)))

하지만 CSV 파일이 작 으면 전체 목록을 목록으로 읽은 다음 일반적인 방법으로 색인을 사용하여 액세스 할 수 있습니다. 이것은 또한 csv 리더를 재설정하지 않고도 임의의 순서로 여러 행에 액세스 할 수 있다는 장점이 있습니다.

my_csv_data = list(reader)
print(my_csv_data[N])

 

참조 페이지 https://stackoverflow.com/questions/27307385

 

 

반응형

댓글