在Ruby中读取文件的第一行

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

(具体来说:我想在我最新的Capistrano部署的Rails目录中读取REVISION文件中的git commit UUID,然后将其输出到我的标记中,这将使我看到在浏览器中部署了什么版本的服务器。如果有一个完全不同的更好的方法来做到这一点,请让我知道。)

这将读取完全一行,并确保该文件后立即正确closures。

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

这里有一个简洁的地道的方式来做到这一点,正确打开文件阅读,然后closures它。

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

如果你想要一个空文件来引起exception,请使用它。

 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 

你可以试试这个:

 File.foreach('path_to_file').first 

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

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

另外,你可以在你的应用程序中做一个git-log:

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

%H指出打印完整提交哈希的格式。 还有一些模块可以让你以Rails应用程序的方式访问你的本地git仓库,尽pipe我从来没有使用它们。

 first_line = open("filename").gets 

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

我认为jkupferman提出的调查git --pretty选项的build议是最有意义的,然而另一种方法将是head命令eg

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

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

 def readit(filename) text = "" begin text = File.open(filename, &:readline) rescue EOFError end text end