여러 패턴으로 큰 파일에서 특정 열 찾기 / 바꾸기


0

100GB CSV 파일이 있습니다. 다음과 같이 보입니다.

11,aa,gg,tt
ew,11,rggr,tr

그리고 대체 (이 파일에서 20,000 줄)를 지정하는 두 번째 것 :

gg,q
aaa,b

내가하고 싶은 것은 첫 번째 파일의 모든 줄을 넘어 두 번째 파일에 나타나는 경우 세 번째 열의 값을 대체하는 것입니다 (예 :이 경우 gg를 q로 대체하십시오). 이는 전체 문자열이 세 번째 열에 나타나는 경우에만 해당됩니다. 따라서 현재 예제의 결과는 다음과 같습니다.

11,aa,q,tt
ew,11,rggr,tr

그것을 달성하는 좋은 방법은 무엇입니까?

답변:


1

파일 크기가 주어지면 Perl 또는 Python과 같은 언어 로이 파일을 작성하여 교체 파일을 메모리에 (빠른 조회를 위해 해시 또는 사전에)로드 한 다음 주 csv 파일을 한 줄씩 파싱 할 수 있습니다. 다음은 파이썬에서 csv 파일을 "replace.csv"로 바꾸고 기본 csv 파일로 "big.csv"라고 가정하는 방법에 대한 예제입니다.

#!/usr/bin/python
import csv
import sys

repl = dict()

# Load replacements into memory
with open("replace.csv", "r") as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for row in reader:
        if len(row) >= 2:
            repl[row[0]] = row[1]

# Do the replacements
with open("big.csv", "r") as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    writer = csv.writer(sys.stdout)
    for row in reader:
        if len(row) >= 3:
            if row[2] in repl:
                    row[2] = repl[row[2]]
            writer.writerow(row)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.