我写了一个简单的脚本,它应该能够读取整个目录并将HTML数据解析成普通脚本,通过去掉HTML标签,然后将其写入一个文件中。
我有8GB内存,也有足够的虚拟内存可用。当我执行此操作时,有超过5GB的可用RAM。目录中最大的文件大小为3.8GB。
这个脚本是:
完整的错误代码为:
我有8GB内存,也有足够的虚拟内存可用。当我执行此操作时,有超过5GB的可用RAM。目录中最大的文件大小为3.8GB。
这个脚本是:
file_count = 1
File.open("allscraped.txt", 'w') do |out1|
for file_name in Dir["allParts/*.dat"] do
puts "#{file_name}#:#{file_count}"
file_count +=1
File.open(file_name, "r") do |file|
source = ""
tmp_src = ""
counter = 0
file.each_line do |line|
scraped_content = line.gsub(/<.*?\/?>/, '')
tmp_src << scraped_content
if (counter % 10000) == 0
tmp_src = tmp_src.gsub( /\s{2,}/, "\n" )
source << tmp_src
tmp_src = ""
counter = 0
end
counter += 1
end
source << tmp_src.gsub( /\s{2,}/, "\n" )
out1.write(source)
break
end
end
end
完整的错误代码为:
realscraper.rb:33:in `block (4 levels) in <main>': failed to allocate memory (No
MemoryError)
from realscraper.rb:27:in `each_line'
from realscraper.rb:27:in `block (3 levels) in <main>'
from realscraper.rb:23:in `open'
from realscraper.rb:23:in `block (2 levels) in <main>'
from realscraper.rb:13:in `each'
from realscraper.rb:13:in `block in <main>'
from realscraper.rb:12:in `open'
from realscraper.rb:12:in `<main>'
第27行是file.each_line do |line|
,33行是source << tmp_src
。失败的文件是最大的一个(3.8 GB)。这里的问题是什么?即使我有足够的内存,为什么还会出现这个错误?我该如何修复它?