在Ruby中读取文件的常见方法有哪些?
例如,这里有一个方法:
fileObj = File.new($fileName, "r")
while (line = fileObj.gets)
puts(line)
end
fileObj.close
我知道Ruby非常灵活。每种方法的优点/缺点是什么?
在Ruby中读取文件的常见方法有哪些?
例如,这里有一个方法:
fileObj = File.new($fileName, "r")
while (line = fileObj.gets)
puts(line)
end
fileObj.close
我知道Ruby非常灵活。每种方法的优点/缺点是什么?
当前回答
您可以一次读取所有文件:
content = File.readlines 'file.txt'
content.each_with_index{|line, i| puts "#{i+1}: #{line}"}
当文件很大或可能很大时,通常最好逐行处理:
File.foreach( 'file.txt' ) do |line|
puts line
end
有时候你想访问文件句柄或者自己控制读取操作:
File.open( 'file.txt' ) do |f|
loop do
break if not line = f.gets
puts "#{f.lineno}: #{line}"
end
end
对于二进制文件,你可以指定一个空分隔符和块大小,如下所示:
File.open('file.bin', 'rb') do |f|
loop do
break if not buf = f.gets(nil, 80)
puts buf.unpack('H*')
end
end
最后,您可以在没有块的情况下完成,例如在同时处理多个文件时。在这种情况下,文件必须显式关闭(根据@antinome的评论改进):
begin
f = File.open 'file.txt'
while line = f.gets
puts line
end
ensure
f.close
end
参考:文件API和IO API。
其他回答
file_content = File.read('filename with extension');
puts file_content;
http://www.ruby-doc.org/core-1.9.3/IO.html#method-c-read
File.open("my/file/path", "r") do |f|
f.each_line do |line|
puts line
end
end
# File is closed automatically at end of block
也可以像上面那样显式地关闭文件(传递一个块来打开并为你关闭它):
f = File.open("my/file/path", "r")
f.each_line do |line|
puts line
end
f.close
一个简单的方法是使用readlines:
my_array = IO.readlines('filename.txt')
输入文件中的每一行都是数组中的一个条目。该方法为您处理打开和关闭文件的操作。
content = `cat file`
我认为这种方法是最“不寻常”的一种。也许这有点棘手,但如果安装了cat,它就可以工作。
您可以一次读取所有文件:
content = File.readlines 'file.txt'
content.each_with_index{|line, i| puts "#{i+1}: #{line}"}
当文件很大或可能很大时,通常最好逐行处理:
File.foreach( 'file.txt' ) do |line|
puts line
end
有时候你想访问文件句柄或者自己控制读取操作:
File.open( 'file.txt' ) do |f|
loop do
break if not line = f.gets
puts "#{f.lineno}: #{line}"
end
end
对于二进制文件,你可以指定一个空分隔符和块大小,如下所示:
File.open('file.bin', 'rb') do |f|
loop do
break if not buf = f.gets(nil, 80)
puts buf.unpack('H*')
end
end
最后,您可以在没有块的情况下完成,例如在同时处理多个文件时。在这种情况下,文件必须显式关闭(根据@antinome的评论改进):
begin
f = File.open 'file.txt'
while line = f.gets
puts line
end
ensure
f.close
end
参考:文件API和IO API。