gpt4 book ai didi

python 没有足够的 RAM 使用磁盘空间而不是 RAM

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:13 26 4
gpt4 key购买 nike

考虑以下 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))

使用生成器更新 2(惰性进化)

我有这个想法,但我不确定它是否有所作为

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))

最佳答案

when using json.dumps you always need to write the data at once

不是真的。您真的应该对大数据采用流式处理方法。在这种情况下,类似于:

fout.write('[')
for ii, row in enumerate(rows):
if ii != 0:
fout.write(',\n')
json.dump(row, fout, indent=4)
fout.write(']')

通过这种方式,您可以一次写入一行,并且还可以节省将所有 放入您不需要的 list 的开销。

关于python 没有足够的 RAM 使用磁盘空间而不是 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37412214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com