Development Tip

TSV 파일을 읽고 구문 분석 한 다음 CSV로 저장하기 위해 조작 (* 효율적으로 *)

yourdevel 2020. 11. 20. 09:44
반응형

TSV 파일을 읽고 구문 분석 한 다음 CSV로 저장하기 위해 조작 (* 효율적으로 *)


내 소스 데이터는 TSV 파일, 6 개 열 및 2 백만 개 이상의 행에 있습니다.

내가 달성하려는 것은 다음과 같습니다.

  1. 이 소스 파일의 3 개 열 (3, 4, 5)에있는 데이터를 읽어야합니다.
  2. 다섯 번째 열은 정수입니다. 이 정수 값을 사용하여 세 번째 및 네 번째 열의 데이터를 사용하여 행 항목을 복제해야합니다 (정수 횟수 기준).
  3. # 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))

참고 URL : https://stackoverflow.com/questions/13992971/reading-and-parsing-a-tsv-file-then-manipulating-it-for-saving-as-csv-efficie

반응형