我想只讀使用Ruby以最快,最簡單,最習慣的方式執行的文件的第一行。什麼是最好的方法?閱讀Ruby中文件的第一行
(具體來說:我想在我的最新Capistrano部署的Rails目錄中讀取REVISION文件中的git commit UUID,然後將其輸出到我的標記中,這會讓我在http瀏覽時看到什麼版本是部署到我的服務器如果有這樣做完全不同的&更好的辦法,請讓我知道)
我想只讀使用Ruby以最快,最簡單,最習慣的方式執行的文件的第一行。什麼是最好的方法?閱讀Ruby中文件的第一行
(具體來說:我想在我的最新Capistrano部署的Rails目錄中讀取REVISION文件中的git commit UUID,然後將其輸出到我的標記中,這會讓我在http瀏覽時看到什麼版本是部署到我的服務器如果有這樣做完全不同的&更好的辦法,請讓我知道)
這將讀取恰好一行,並確保該文件被正確關閉後立即。
File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
File.open('somefile.txt', &:readline)
first_line = open("filename").gets
你可以試試這個:。
File.foreach('path_to_file').first
如何讀取紅寶石文件的第一行:
commit_hash = File.open("filename.txt").first
或者你可以只是做一個從你的應用程序中的Git日誌:
commit_hash = `git log -1 --pretty=format:"%H"`
的%H告訴打印完整提交哈希的格式。還有一些模塊可以讓你以Rails應用程序的方式訪問你的本地git倉庫,儘管我從未使用它們。
.last不按我在這裏計劃的那樣工作。我如何爲最後一行做到這一點? – 2012-07-20 22:15:44
我認爲調查git --pretty
選項的jkupferman建議是最有意義的,然而,另一種方法是head
命令,例如,
ruby -e 'puts `head -n 1 filename`' #(backtick before `head` and after `filename`)
https://gist.github.com/784711 – maletor 2011-01-18 18:49:19
下面是一個簡潔的慣用方式,它可以正確打開文件進行閱讀,然後關閉它。
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
更簡單的實現:'class File; def self.head(path,n = 1);的foreach(路徑)。首先(N);結束;結尾' – 2014-11-11 14:23:38
(6年後....)在第一個2個例子中,符號作爲第二個參數打開時發生了什麼?我無法找到任何解釋正在做什麼的文檔。 Thx的任何信息... – skydvr 2017-12-14 16:51:36
first_line = File.readlines('file_path').first.chomp
雖然它的工作原理,但它不會加載整個文件在內存中? – Saim 2016-05-20 22:39:21
提高上發表@Chuck答案,我想這可能是值得指出的是,如果你正在閱讀的文件是空的,EOFError異常將被拋出。抓住並忽略異常:
def readit(filename)
text = ""
begin
text = File.open(filename, &:readline)
rescue EOFError
end
text
end
LocalJumpError:沒有給出的塊 – klochner 2009-09-29 01:43:28
@klochner:你的Ruby是舊的。這在1.8.7及更高版本中工作正常。 – Chuck 2009-09-29 01:55:08
對不起文森特,我不能刪除downvote,除非你做一些小修改。 – klochner 2009-09-29 02:09:22