【问题标题】:What's a reasonable way to read an entire text file as a single string?将整个文本文件作为单个字符串读取的合理方法是什么?
【发布时间】:2011-09-22 06:26:31
【问题描述】:

我相信这很容易;我只是无法立即从 Google 中找到答案。

我知道我可以做到(对吗?):

text = ""
File.open(path).each_line do |line|
    text += line
end

# Do something with text

但这似乎有点过分,不是吗?还是在 Ruby 中这样做?

【问题讨论】:

  • 警告:将文件读入内存,也就是 slurping,存在可扩展性问题。 Ruby 以及 Perl 和其他语言可以逐行读取文件,其速度几乎与读取、拆分和循环文件一样快。
  • @the Tin Man:这是个好建议,我感谢你。这个问题是不久前提出的,所以我可能记错了;但我相信我当时的意图是对文件的文本进行一些多行正则表达式匹配,所以我确实需要内存中的整个内容(即,我不只是打算逐行阅读)。

标签: ruby string file io


【解决方案1】:

我在搜索时找到的第一个结果。

我想更改模式,IO.read 似乎不可能,除非我错了?

无论如何,你可以这样做:

data = File.open(path,'rb',&:read)

当您想使用任何其他选项时,它也很有用:

https://ruby-doc.org/core/IO.html#method-c-new

【讨论】:

    【解决方案2】:

    IO.read() 是您要查找的内容。
    FileIO 的子类,因此您不妨使用:

    text = File.read(path)
    

    没有比这更直观的了。

    【讨论】:

    • 就像我对 sm 的问题一样,IO 或 File 是否将整个文件读入内存,或者它是否使用带有 SEEK 的文件指针来跟踪它而不是将大文件加载到内存中?
    • @Pred 将其加载到字符串中,因此加载到内存中。
    【解决方案3】:

    IO.read() 呢?

    编辑:IO.read(),作为额外的奖励,会为您关闭文件。

    【讨论】:

    • 这会将整个文件放入内存中,还是保留一个文件指针,这样它就不会使用所有的 RAM 来读取一个大文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2012-02-22
    • 2023-03-06
    相关资源
    最近更新 更多