是否可以从知道文件行号的文件中提取特定行?例如,只需从文件“text.txt”中获取行N
的内容为一个字符串?如何从文件中获取特定行
回答
尝试以下两种解决方案之一:
file = File.open "file.txt"
#1 solution would eat a lot of RAM
p [*file][n-1]
#2 solution would not
n.times{ file.gets }
p $_
file.close
您可以通过指数从readlines
得到它。
line = IO.readlines("file.txt")[42]
只有当它是一个小文件时才使用它。
这是正确的答案 – 2013-03-24 00:49:48
这只是正确的答案,如果文件很小,少于几MB。否则,它会强制Ruby一次加载整个文件,这对于大文件来说比使用基于'foreach'或'gets'的解决方案要慢。请参阅http://stackoverflow.com/questions/25189262/why-is-slurping-a-file-bad其中包含基准。 – 2015-12-14 18:11:51
我很惊讶地发现它需要多达几MB的空间! – 2015-12-15 07:42:26
def get_line_from_file(path, line)
result = nil
File.open(path, "r") do |f|
while line > 0
line -= 1
result = f.gets
end
end
return result
end
get_line_from_file("/tmp/foo.txt", 20)
这是因为一个很好的解决方案:
- 不要使用
File.read
,因此你不将整个文件读入内存中。这样做可能会成为一个问题,如果该文件是20MB大,你经常阅读,所以GC不跟上。 - 你只从文件中读取,直到你想要的行。如果你的文件有1000行,那么获得第20行只会读取20行到Ruby的第一行。
你可以,如果你想提高一个错误(EOFError
),而不是通过一个彻头彻尾的越界线的时候返回nil与readline
取代gets
。
linenumber=5
open("file").each_with_index{|line,ind|
if ind+1==linenumber
save=line
# break or exit if needed.
end
}
或
linenumber=5
f=open("file")
while line=f.gets
if $. == linenumber # $. is line number
print "#{f.lineno} #{line}" # another way
# break # break or exit if needed
end
end
f.close
如果你只是想获得线和别的什么也不做,你可以用这一个班轮
ruby -ne '(print $_ and exit) if $.==5' file
不错。那时全局$变量变得有用。 – Nakilon 2010-10-25 13:27:13
当该行已被找到时,这将继续读取该文件。 – steenslag 2010-10-25 13:57:16
没关系。例如,如果行号是最后一行第二行,那么它必须读取该行以及... – ghostdog74 2010-10-25 14:35:38
文件有一个很好的方法lineno
。
def get_line(filename, lineno)
File.open(filename,'r') do |f|
f.gets until f.lineno == lineno - 1
f.gets
end
end
您并不需要lineno()。你可以用'(lineno-1).times {f.gets}'替换'until'行。 – 2010-10-25 14:44:58
如果你想要一个内衬和不关心的内存使用情况,使用(假设行从1开始编号)
lineN = IO.readlines('text.txt')[n-1]
或
lineN = f.readlines[n-1]
,如果你已经打开文件。
否则这将是更好地做到这样的:
lineN = File.open('text.txt') do |f|
(n-1).times { f.gets } # skip lines preceeding line N
f.gets # read line N contents
end
- 1. 如何从文件中获取特定行中的特定值?
- 2. Python - 从文件中获取特定行
- 3. 如何从C++文本文件中获取特定行?
- 4. 如何从大文件中的特定行读取特定行
- 5. 如何从目录中获取文件特定的文件名?
- 6. 如何从特定文本行中获取文本?
- 7. 从文件中获取特定内容
- 8. 如何获取文本文件中的特定行
- 9. 如何从.txt获取特定行(C++)
- 10. 如何从ContentProvider获取特定的行?
- 11. 如何在PHP中获取txt文件中的特定行?
- 12. 从大文件中读取特定行
- 13. 从文件中读取特定行
- 14. 从文件中读取特定的行
- 15. 从文件中读取特定行
- 16. PHP:从文件中读取特定行
- 17. C - 从文件中读取特定行
- 18. 如何使用awk从文本文件中提取特定行?
- 19. 如何从VHDL文本文件中的特定行读取
- 20. 如何从在asp.net文件夹(vb.net)获取特定文件
- 21. 如何从文本文件中的特定行获取表的值?
- 22. 如何从文件中读取一行中的特定字符?
- 23. 如何从bash中的文件中提取特定的行?
- 24. 如何仅使用PHP从文件中获取特定内容。
- 25. 如何从XML文件中获取特定记录?
- 26. 如何从XML文件中的特定节点获取值?
- 27. 如何从特定的“值”文件夹中获取字符串?
- 28. 如何使用Jsoup从html文件中获取特定数据?
- 29. AngularJS:如何从JSON文件中获取特定id的数据
- 30. 如何从Excel文件中获取特定列的数据?
是解决方案#2线获得N + 1? – 2010-10-25 13:18:20
@马克托马斯,排名第一。我假设索引从0 – Nakilon 2010-10-25 13:25:06
感谢'[* File.open('...')]',不知道'to_a'文件实例可以给我它的行 – tig 2010-10-25 14:24:53