1 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個贊
主要問題是將整個數(shù)據(jù)集讀入內(nèi)存。通常,對于一個非常大的文件,我需要逐行讀取文件,因?yàn)樗贿m合內(nèi)存。因此,我拆分了文件,然后才能處理各個部分(使用 Python/pandas、R 或 Stata,它們都將整個數(shù)據(jù)集加載到內(nèi)存中)。
要拆分文件,我會從頭開始編寫一個 CSV 閱讀器。如果您不必處理帶引號的字符串中的分隔符,那就不太難了(否則使用regex并不會更難)。使用內(nèi)置csv模塊可能用更少的代碼(我承認(rèn)我從未使用過它)。
下面根據(jù)變量的值拆分文件。也可以調(diào)整代碼以固定行數(shù)拆分,過濾,添加或刪除變量......
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:])
添加回答
舉報(bào)