限制python内存上限_内存上限?

(这是我的第三个答案,因为我误解了您在我的原始代码中所做的工作,然后在我的第二个答案中犯了一个小而关键的错误,希望第三个是一个魅力。

编辑:因为这似乎是一个流行的答案,所以我做了一些修改,以改进其实现,这些年来大多数都不太重要。因此,如果人们把它作为模板,它将提供一个更好的基础。

正如其他人所指出的,您的MemoryError问题很可能是因为您试图将大型文件的全部内容读入内存,然后,除此之外,通过从每行创建一个字符串值列表,有效地将所需的内存量加倍。

Python的内存限制取决于计算机和操作系统有多少可用的物理ram和虚拟内存磁盘空间。即使你没有完全使用它,你的程序“工作”,使用它可能是不切实际的,因为它需要太长的时间。

无论如何,最明显的避免方法是一次只处理一行文件,这意味着您必须以增量方式进行处理。

为此,将保留每个字段的运行总计列表。完成后,可以通过将相应的总值除以读取的总行数来计算每个字段的平均值。完成后,可以打印出这些平均值,并将一些平均值写入其中一个输出文件。我也有意识地尝试使用非常描述性的变量名,以使其易于理解。try:

from itertools import izip_longest

except ImportError: # Python 3

from itertools import zip_longest as izip_longest

GROUP_SIZE = 4

input_file_names = ["A1_B1_100000.txt", "A2_B2_100000.txt", "A1_B2_100000.txt",

"A2_B1_100000.txt"]

file_write = open("average_generations.txt", 'w')

mutation_average = open("mutation_average", 'w') # left in, but nothing written

for file_name in input_file_names:

with open(file_name, 'r') as input_file:

print('processing file: {}'.format(file_name))

totals = []

for count, fields in enumerate((line.split('\t') for line in input_file), 1):

totals = [sum(values) for values in

izip_longest(totals, map(float, fields), fillvalue=0)]

averages = [total/count for total in totals]

for print_counter, average in enumerate(averages):

print(' {:9.4f}'.format(average))

if print_counter % GROUP_SIZE == 0:

file_write.write(str(average)+'\n')

file_write.write('\n')

file_write.close()

mutation_average.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值