gpt4 book ai didi

ruby - 大数组“无法分配内存”错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:10 24 4
gpt4 key购买 nike

我正在尝试将一个大文本文件(大约 200 万行数字,260MB)导入一个数组,对该数组进行编辑,然后将结果写入一个新的文本文件,方法是:

file_data = File.readlines("massive_file.txt")
file_data = file_data.map!(&:strip)
file_data.each do |s|
s.gsub!(/,.*\z/, "")
end
File.open("smaller_file.txt", 'w') do |f|
f.write(file_data.map(&:strip).uniq.join("\n"))
end

但是,我收到了错误分配内存失败 (NoMemoryError)。如何分配更多内存来完成任务?或者,理想情况下,是否可以使用另一种方法来避免重新分配内存?

最佳答案

您可以逐行读取文件:

require 'set'
require 'digest/md5'
file_data = File.new('massive_file.txt', 'r')
file_output = File.new('smaller_file.txt', 'w')
unique_lines_set = Set.new

while (line = file_data.gets)
line.strip!
line.gsub!(/,.*\z/, "")
# Check if the line is unique
line_hash = Digest::MD5.hexdigest(line)
if not unique_lines_set.include? line_hash
# It is unique so add its hash to the set
unique_lines_set.add(line_hash)

# Write the line in the output file
file_output.puts(line)
end
end

file_data.close
file_output.close

关于ruby - 大数组“无法分配内存”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068226/

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