У меня есть файл CSV 100 ГБ. Выглядит примерно так:

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 ответ1

1

Учитывая размер ваших файлов, я бы предпочел написать это на языке, таком как Perl или Python, чтобы я мог загрузить замещающий файл в память (в хэш или словарь для быстрого поиска), а затем проанализировать основной файл CSV построчно. Вот пример того, как это сделать в Python, если предположить, что ваши CSV-файлы назывались «replace.csv» для замен и «big.csv» для основного 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .