在Ruby中读取文件的第一行

时间:2009-09-29 01:28:46

标签: ruby-on-rails ruby git file-io capistrano

我想以最快,最简单,最惯用的方式使用Ruby读取文件的第一行。什么是最好的方法?

(具体来说:我想从我最新的Capistrano部署的Rails目录中的REVISION文件中读取git commit UUID,然后将其输出到我的标签。这将让我看一眼http浏览器部署的版本到我的服务器。如果有一个完全不同的更好的方法,请告诉我。)

8 个答案:

答案 0 :(得分:101)

这将只读取一行并确保文件在紧接着之后正确关闭。

strVar = File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
strVar = File.open('somefile.txt', &:readline)
puts strVar

答案 1 :(得分:16)

这是一种简洁的惯用方法,可以正确打开文件进行阅读,然后将其关闭。

File.open('path.txt', &:gets)

如果您希望空文件导致异常,请改用它。

File.open('path.txt', &:readline)

此外,这是一个快速&糟糕的头部实现,可以用于您的目的,在许多其他情况下,您想要阅读更多的行。

# Reads a set number of lines from the top.
# Usage: File.head('path.txt')
class File
  def self.head(path, n = 1)
     open(path) do |f|
        lines = []
        n.times do
          line = f.gets || break
          lines << line
        end
        lines
     end
  end
end

答案 2 :(得分:7)

你可以试试这个:

File.foreach('path_to_file').first

答案 3 :(得分:6)

如何读取ruby文件中的第一行:

commit_hash = File.open("filename.txt").first

或者你可以从应用程序内部执行git-log:

commit_hash = `git log -1 --pretty=format:"%H"`

%H告诉格式打印完整提交哈希。还有一些模块允许您以更加红宝石的方式从Rails应用程序内部访问本地git repo,尽管我从未使用它们。

答案 4 :(得分:4)

first_line = open("filename").gets

答案 5 :(得分:2)

我认为调查git --pretty选项的jkupferman建议最有意义,但另一种方法是head命令,例如

ruby -e 'puts `head -n 1 filename`'  #(backtick before `head` and after `filename`)

答案 6 :(得分:2)

first_line = File.readlines('file_path').first.chomp

答案 7 :(得分:2)

改进@Chuck发布的答案,我认为值得指出的是,如果您正在阅读的文件为空,则会抛出EOFError异常。抓住并忽略异常:

kprintf()