阅读Ruby中文件的第一行
我想只读使用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