在Ruby中解析製表符分隔文件的最好(最有效的)方式是什麼?在Ruby中解析製表符分隔文件的最佳方式是什麼?
50
A
回答
92
Ruby CSV庫允許您指定字段分隔符。 Ruby 1.9使用FasterCSV。像這樣的東西可以工作:
require "csv"
parsed_file = CSV.read("path-to-file.csv", { :col_sep => "\t" })
23
TSV的規則實際上有點不同於CSV。主要區別在於CSV提供了在字段中粘住逗號然後使用引號字符和字段中的引號轉義的規定。我寫了一個簡單的例子來顯示簡單的迴應是如何失敗的:
require 'csv'
line = 'boogie\ttime\tis "now"'
begin
line = CSV.parse_line(line, col_sep: "\t")
puts "parsed correctly"
rescue CSV::MalformedCSVError
puts "failed to parse line"
end
begin
line = CSV.parse_line(line, col_sep: "\t", quote_char: "Ƃ")
puts "parsed correctly with random quote char"
rescue CSV::MalformedCSVError
puts "failed to parse line with random quote char"
end
#Output:
# failed to parse line
# parsed correctly with random quote char
如果你想使用的CSV庫,你可以使用,你不希望看到一個隨機引號字符,如果你的文件(例子中這個),但是你也可以使用像下面顯示的StrictTsv類的更簡單的方法來獲得相同的效果,而不必擔心字段引用。
# The main parse method is mostly borrowed from a tweet by @JEG2
class StrictTsv
attr_reader :filepath
def initialize(filepath)
@filepath = filepath
end
def parse
open(filepath) do |f|
headers = f.gets.strip.split("\t")
f.each do |line|
fields = Hash[headers.zip(line.split("\t"))]
yield fields
end
end
end
end
# Example Usage
tsv = Vendor::StrictTsv.new("your_file.tsv")
tsv.parse do |row|
puts row['named field']
end
使用CSV庫或一些更嚴格的選擇只是取決於誰在給你發來的文件,以及他們是否期待要堅持嚴格的標準TSV。關於TSV標準
+0
請在答案中加入代碼片段,*不要*在外部要點中。這個要點現在似乎已經下降了,這是一個真正的恥辱。 – 2015-02-01 19:26:23
0
找到我喜歡mmmries答案。但是,我討厭紅寶石從分裂結束時消除任何空值的方式。它也沒有在行結束時剝離換行符。
此外,我有一個文件與一個字段中的潛在換行符。所以,我改寫了他的「解析」,如下所示:
def parse
open(filepath) do |f|
headers = f.gets.strip.split("\t")
f.each do |line|
myline=line
while myline.scan(/\t/).count != headers.count-1
myline+=f.gets
end
fields = Hash[headers.zip(myline.chomp.split("\t",headers.count))]
yield fields
end
end
end
這樣可以將在必要時得到了全系列的任何數據線,並始終返回全套資料(不包括潛在的零項在年底)。
相關問題
- 1. 在Ruby中解析網頁的最佳方式是什麼?
- 2. 在Perl中解析Excel文件的最佳方式是什麼?
- 3. 解析字符串間隔的最佳方法是什麼?
- 4. Ruby:什麼是解析XML的最佳方式?
- 5. 解析製表符分隔的文件
- 6. 重新排列vim中製表符分隔文本文件中列的最佳方式是什麼?
- 7. 在Ruby中寫入文件的最佳方式是什麼?
- 8. 解析字符串的最佳方式是什麼?
- 9. PowerShell解析這些字符串的最佳方式是什麼?
- 10. 什麼是解析和替換字符串的最佳方式?
- 11. 在PHP中解析PayPal NVP的最佳方式是什麼?
- 12. 什麼是解析Microsoft Office和PDF文檔的最佳方式?
- 13. 將日誌文件解析爲python列表的最佳方式是什麼?
- 14. 什麼是解析短信電子郵件的最佳方式?
- 15. 正則表達式來解析製表符分隔文件
- 16. 功能上用分隔符分隔字符串的最佳方法是什麼?
- 17. 什麼是讀取/解析XML文件的最佳方法
- 18. 在製表符分隔的csv文件中追加新列的最佳方法
- 19. R中基準(性能分析)的最佳方式是什麼?
- 20. 在.net vb中解析文本文件的最佳(性能)方法是什麼?
- 21. 轉換文件的最佳文件解析解決方案是什麼?
- 22. 在Perl中解析製表符分隔文件
- 23. 在HTML中解析和替換文本的最佳方式是什麼?
- 24. 從iOS的URL解析XML的最佳方式是什麼?
- 25. 從Python中的字符串解析元組的最佳方式是什麼?
- 26. 解析C#中「壞」字的字符串的最佳方式是什麼?
- 27. 什麼是使用正則表達式分隔數據的最佳方式
- 28. 解析這個字符串的最佳方法是什麼?
- 29. 什麼是解析JSON字符串的最佳方法?
- 30. 使用Text :: CSV解析Perl中的製表符分隔文件
請注意,如果任何製表符分隔的值包含雙引號,則此方法將失敗。另一個答案中的StrictTsv建議更強大。 – 2016-11-01 01:49:02