gpt4 book ai didi

python - 内存上限?

转载 作者:IT老高 更新时间:2023-10-28 22:19:46 26 4
gpt4 key购买 nike

python 的内存有限制吗?我一直在使用 python 脚本从至少 150mb 大的文件中计算平均值。

根据文件的大小,我有时会遇到 MemoryError

可以给python分配更多的内存,这样我就不会遇到错误了吗?


编辑:代码如下

注意:文件大小可能有很大差异(最大 20GB),文件的最小大小为 150mb

file_A1_B1 = open("A1_B1_100000.txt", "r")
file_A2_B2 = open("A2_B2_100000.txt", "r")
file_A1_B2 = open("A1_B2_100000.txt", "r")
file_A2_B1 = open("A2_B1_100000.txt", "r")
file_write = open ("average_generations.txt", "w")
mutation_average = open("mutation_average", "w")

files = [file_A2_B2,file_A2_B2,file_A1_B2,file_A2_B1]

for u in files:
line = u.readlines()
list_of_lines = []
for i in line:
values = i.split('\t')
list_of_lines.append(values)

count = 0
for j in list_of_lines:
count +=1

for k in range(0,count):
list_of_lines[k].remove('\n')

length = len(list_of_lines[0])
print_counter = 4

for o in range(0,length):
total = 0
for p in range(0,count):
number = float(list_of_lines[p][o])
total = total + number
average = total/count
print average
if print_counter == 4:
file_write.write(str(average)+'\n')
print_counter = 0
print_counter +=1
file_write.write('\n')

最佳答案

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

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

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

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

无论如何,避免这种情况的最明显方法是一次处理每个文件一行,这意味着您必须逐步进行处理。

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

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

关于python - 内存上限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4285185/

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