반응형
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 지원되지 않는 작업 : 쓰기 불가능한 파이썬 (0) | 2020.12.03 |
---|---|
파이썬 Selenium 웹 드라이버 : 요소의 모든 속성을 어떻게 찾습니까? (0) | 2020.12.03 |
파이썬 0으로 나누면 0이됩니다. (0) | 2020.12.03 |
파이썬 word2vec bin 파일을 텍스트로 변환 (0) | 2020.12.03 |
파이썬 Run python file -- what function is main? (0) | 2020.12.03 |
댓글