我有一个 100GB 的 CSV 文件。看起来像这样:
11,aa,gg,tt
ew,11,rggr,tr
第二个文件指定了替换(此文件中有 20,000 行):
gg,q
aaa,b
我想要做的是遍历第一个文件中的每一行,并替换第三列的值(如果该值出现在第二个文件中)(例如,在本例中用 q 替换 gg)。请注意,这仅当整个字符串出现在第三列时才有效。因此,对于当前示例,结果将是:
11,aa,q,tt
ew,11,rggr,tr
实现这一目标的好方法是什么?
答案1
考虑到文件的大小,我会选择使用 Perl 或 Python 等语言编写此代码,以便我可以将替换文件加载到内存中(加载到哈希或字典中以便快速查找),然后逐行解析主 csv 文件。下面是使用 Python 编写的示例,说明如何执行此操作,假设您的 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)