gpt4 book ai didi

ruby - 如何在 Ruby 中替换文件的前几个字节而不打开整个文件?

转载 作者:行者123 更新时间:2023-12-02 02:08:02 25 4
gpt4 key购买 nike

我有一个 30MB 的 XML 文件,其中开头包含一些乱码,因此通常我必须将其删除,以便 Nokogiri 能够正确解析 XML 文档。

这是我目前拥有的:

    contents = File.open(file_path).read
if contents[0..123].include? 'authenticate_response'
fixed_contents = File.open(file_path).read[123..-1]
File.open(file_path, 'w') { |f| f.write(fixed_contents) }
end

但是,这实际上会导致 ruby​​ 脚本打开大型 XML 文件两次。一次读取前 123 个字符,另一次读取除前 123 个字符之外的所有内容。

为了解决第一个问题,我能够做到这一点:

contents = File.open(file_path).read(123)

但是,现在我需要从文件中删除这些字符而不读取整个文件。如何“修剪”该文件的开头而不必打开内存中的整个文件?

最佳答案

你可以打开一次文件,然后读取并检查“垃圾”,最后将打开的文件直接传递给nokogiri进行解析。这样,您只需读取该文件一次,根本不需要写入它。

File.open(file_path) do |xml_file|
if xml_file.read(123).include? 'authenticate_response'
# header found, nothing to do
else
# no header found. We rewind and let nokogiri parse the whole file
xml_file.rewind
end

xml = Nokogiri::XML.parse(xml_file)
# Now to whatever you want with the parsed XML document
end

请引用IO#read的文档, IO#rewindNokigiri::XML::Document.parse有关这些方法的详细信息。

关于ruby - 如何在 Ruby 中替换文件的前几个字节而不打开整个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68115902/

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