是否可以從知道文件行號的文件中提取特定行?例如,只需從文件「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. 如何從特定文本行中獲取文本?
- 3. 從文件中獲取特定內容
- 4. 如何從.txt獲取特定行(C++)
- 5. 從文件中讀取特定行
- 6. 從大文件中讀取特定行
- 7. PHP:從文件中讀取特定行
- 8. C - 從文件中讀取特定行
- 9. 如何在PHP中獲取txt文件中的特定行?
- 10. 如何從在asp.net文件夾(vb.net)獲取特定文件
- 11. 如何從Excel文件中獲取特定列的數據?
- 12. 如何僅使用PHP從文件中獲取特定內容。
- 13. AngularJS:如何從JSON文件中獲取特定id的數據
- 14. 如何使用Jsoup從html文件中獲取特定數據?
- 15. 如何從XML文件中獲取特定的數組值?
- 16. 如何從_applicationObject獲取文件中的特定字符串
- 17. 如何從Python文件中的特定行中獲取三個整數?
- 18. 如何從文件中讀取特定的行
- 19. 如何讀取特定行的文件
- 20. 我如何從PHP的csv文件中獲取特定行的數據?
- 21. Java:如何從文本文件讀取特定行?
- 22. 從.txt文件讀取特定行
- 23. 從陣列中獲取特定的行
- 24. 如何從內部存儲中的特定文件夾獲取文件列表?
- 25. 從排序後的文件中獲取特定文件
- 26. 從文件中獲取行
- 27. 如何在PowerShell中從Excel中獲取特定行數
- 28. 如何在Tensorflow中從張量中獲取特定行?
- 29. 如何使用'cat'命令獲取文件的特定行?
- 30. PHP:如何獲取特定文件的上次執行時間?
是解決方案#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