Mar*_*rkL 4 ruby duplicate-removal
在特定行中存在特定值的ruby中从CSV文件中删除行的巧妙方法是什么?
这是一个文件的例子:
350 lbs., Outrigger Footprint, 61" x 53", Weight, 767 lbs., 300-2080
350 lbs., Outrigger Footprint, 61" x 53", Weight, 817 lbs., 300-2580
350 lbs., Outrigger Footprint, 61" x 53", Weight, 817 lbs., 300-2580
350 lbs., Outrigger Footprint, 69" x 61", Weight, 867 lbs., 300-3080
350 lbs., Outrigger Footprint, 69" x 61", Weight, 867 lbs., 300-3080
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想要一个只用这个创建的新文件:
350 lbs., Outrigger Footprint, 61" x 53", Weight, 767 lbs., 300-2080
350 lbs., Outrigger Footprint, 61" x 53", Weight, 817 lbs., 300-2580
350 lbs., Outrigger Footprint, 69" x 61", Weight, 867 lbs., 300-3080
Run Code Online (Sandbox Code Playgroud)
给这个时:
300-2580
300-3080
300-2080
Run Code Online (Sandbox Code Playgroud)
所以我知道我可以做到这一点,sort filename|uniq -d但我正在努力学习Ruby(有点痛苦).
先谢谢,M
rub*_*nce 12
您可以使用它来获取csv文件中数组中的唯一行
File.readlines("file.csv").uniq
=> ["350 lbs., Outrigger Footprint, 61\" x 53\", Weight, 767 lbs., 300-2080\n", "350 lbs., Outrigger Footprint, 61\" x 53\", Weight, 817 lbs., 300-2580\n", "350 lbs., Outrigger Footprint, 69\" x 61\", Weight, 867 lbs., 300-3080\n"]
Run Code Online (Sandbox Code Playgroud)
要将其写入新文件,您可以在写入模式下打开文件,将其写入文件:
File.open("new_csv", "w+") { |file| file.puts File.readlines("csv").uniq }
Run Code Online (Sandbox Code Playgroud)
为了比较值,您可以使用","上的拆分功能来访问每列,如下所示:
rows = File.readlines("csv").map(&:chomp) # equivalent to File.readlines.map { |f| f.chomp }
mapped_columns = rows.map { |r| r.split(",").map(&:strip) }
=> [["350 lbs.", " Outrigger Footprint", " 61\" x 53\"", " Weight", " 767 lbs.", " 300-2080"], ["350 lbs.", " Outrigger Footprint", " 61\" x 53\"", " Weight", " 817 lbs.", " 300-2580"], .....]
mapped_columns[0][5]
=> "300-2080"
Run Code Online (Sandbox Code Playgroud)
如果您想要更多功能,最好安装FasterCSV gem.