[英]python use diskspace instead of RAM by no sufficient RAM
考虑以下python代码
with open(sys.argv[2], 'r') as fin, \
open(sys.argv[3], 'w') as fout:
reader = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
writer = csv.DictWriter(fout, reader.fieldnames, dialect='excel')
writer.writeheader()
writer.writerows(reader)
假设我们有一个大约2GB的大文件作为输入,而我们的系统只有512MB RAM,这可能会导致错误的Memory Usage
有没有办法让我的代码使用磁盘空间而不是RAM,即使这会使它变慢呢? 还是这是一个操作系统问题,例如应该添加更多的交换?
上面的代码只是一个例子
考虑这个例子
with io.open(sys.argv[2], 'r', encoding='utf8', errors='ignore') as fin, \
io.open(sys.argv[3], 'w', encoding='utf8', errors='ignore') as fout:
rows = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
fout.write(json.dumps(list(rows), indent=4))
使用json.dumps
您总是需要一次写入数据,如果要附加文件,则必须读取文件并附加数据并将其写入文件,就像这样
data = readjson(jsonfile)
data.append(newentry)
jsonfile.write(json.dumps(data))
我想到这个主意,但不确定是否会有所作为
def gen(list):
for e in list:
yield e
with open(sys.argv[2], 'r') as fin, \
open(sys.argv[3], 'w') as fout:
reader = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
writer = csv.DictWriter(fout, reader.fieldnames, dialect='excel')
writer.writeheader()
writer.writerows(gen(reader))
with open(sys.argv[2], 'r') as fin, \
open(sys.argv[3], 'w') as fout:
rows = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
# fout.write(json.dumps(gen(rows), indent=4)) -> cause error <generator object gen at 0x025BDDA0> is not JSON serializable
fout.write(json.dumps(gen(list(rows)), indent=4))
使用json.dumps时,您总是需要一次写入数据
并不是的。 您确实应该对大数据采用流传输方法。 在这种情况下,类似:
fout.write('[')
for ii, row in enumerate(rows):
if ii != 0:
fout.write(',\n')
json.dump(row, fout, indent=4)
fout.write(']')
这样,您可以一次写入一行,并且还节省了将所有rows
放入不需要的list
的开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.