반응형
TSV 파일을 읽고 구문 분석 한 다음 CSV로 저장하기 위해 조작 (* 효율적으로 *)
내 소스 데이터는 TSV 파일, 6 개 열 및 2 백만 개 이상의 행에 있습니다.
내가 달성하려는 것은 다음과 같습니다.
- 이 소스 파일의 3 개 열 (3, 4, 5)에있는 데이터를 읽어야합니다.
- 다섯 번째 열은 정수입니다. 이 정수 값을 사용하여 세 번째 및 네 번째 열의 데이터를 사용하여 행 항목을 복제해야합니다 (정수 횟수 기준).
- # 2의 출력을 CSV 형식의 출력 파일에 쓰고 싶습니다.
아래는 내가 생각 해낸 것입니다.
내 질문 : 이것이 효율적인 방법입니까? 2 백만 행에서 시도하면 집중적으로 보일 수 있습니다.
먼저 작업 할 샘플 탭 별도의 파일을 만들어 'sample.txt'라고 명명했습니다. 기본이며 4 개의 행만 있습니다.
Row1_Column1 Row1-Column2 Row1-Column3 Row1-Column4 2 Row1-Column6
Row2_Column1 Row2-Column2 Row2-Column3 Row2-Column4 3 Row2-Column6
Row3_Column1 Row3-Column2 Row3-Column3 Row3-Column4 1 Row3-Column6
Row4_Column1 Row4-Column2 Row4-Column3 Row4-Column4 2 Row4-Column6
다음 코드가 있습니다.
import csv
with open('sample.txt','r') as tsv:
AoA = [line.strip().split('\t') for line in tsv]
for a in AoA:
count = int(a[4])
while count > 0:
with open('sample_new.csv','ab') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',')
csvwriter.writerow([a[2], a[3]])
count = count - 1
csv
탭으로 구분 된 값 파일을 읽으 려면 모듈을 사용해야 합니다. 마십시오 하지 한번에 메모리로 읽어. 읽은 각 행에는 출력 CSV 파일에 행을 쓰는 데 필요한 모든 정보가 있습니다. 출력 파일을 계속 열어 둡니다.
import csv
with open('sample.txt','rb') as tsvin, open('new.csv', 'wb') as csvout:
tsvin = csv.reader(tsvin, delimiter='\t')
csvout = csv.writer(csvout)
for row in tsvin:
count = int(row[4])
if count > 0:
csvout.writerows([row[2:4] for _ in xrange(count)])
또는 itertools
모듈을 사용하여 다음 과 같이 반복하십시오 itertools.repeat()
.
from itertools import repeat
import csv
with open('sample.txt','rb') as tsvin, open('new.csv', 'wb') as csvout:
tsvin = csv.reader(tsvin, delimiter='\t')
csvout = csv.writer(csvout)
for row in tsvin:
count = int(row[4])
if count > 0:
csvout.writerows(repeat(row[2:4], count))
반응형
'Development Tip' 카테고리의 다른 글
java.util.ArrayList에 해당하는 Scala (0) | 2020.11.20 |
---|---|
기본값이있는 옵션에 대한 자바 스크립트 디자인 패턴? (0) | 2020.11.20 |
C #은 왜 케이스 뒤에 문을 허용하지만 그 전에는 허용하지 않습니까? (0) | 2020.11.20 |
EC2에서 인스턴스를 삭제하는 방법은 무엇입니까? (0) | 2020.11.20 |
Docker 명령 실패 (Windows) (0) | 2020.11.20 |