1 回答
TA贡献1797条经验 获得超4个赞
主要问题是将整个数据集读入内存。通常,对于一个非常大的文件,我需要逐行读取文件,因为它不适合内存。因此,我拆分了文件,然后才能处理各个部分(使用 Python/pandas、R 或 Stata,它们都将整个数据集加载到内存中)。
要拆分文件,我会从头开始编写一个 CSV 阅读器。如果您不必处理带引号的字符串中的分隔符,那就不太难了(否则使用regex并不会更难)。使用内置csv模块可能用更少的代码(我承认我从未使用过它)。
下面根据变量的值拆分文件。也可以调整代码以固定行数拆分,过滤,添加或删除变量......
import sys
def main(arg):
if len(arg) != 3:
print("csvsplit infile outfile variable")
return
input_name = arg[0]
output_name = arg[1]
split_var = arg[2]
sep = ","
outfiles = {}
with open(input_name) as f:
var = f.readline().rstrip("\r\n").split(sep)
ivar = {name: i for i, name in enumerate(var)}
ikey = ivar[split_var]
for line in f:
v = line.rstrip("\r\n").split(sep)
key = v[ikey]
if key not in outfiles:
outfiles[key] = open("%s_%s.csv" % (output_name, key), "wt")
outfiles[key].write(sep.join(var) + "\n")
outfiles[key].write(line)
for key, outfile in outfiles.items():
outfile.close()
main(sys.argv[1:])
添加回答
举报