Ruby:将值写入CSV文件中的特定位置
我对编码还是相当陌生,我正在努力学习如何操作CSV文件 下面的代码打开指定的CSV文件,转到CSV文件中B列的每个url(标题=url),并在网页上查找价格 CSV文件中的示例数据:Ruby:将值写入CSV文件中的特定位置,ruby,csv,Ruby,Csv,我对编码还是相当陌生,我正在努力学习如何操作CSV文件 下面的代码打开指定的CSV文件,转到CSV文件中B列的每个url(标题=url),并在网页上查找价格 CSV文件中的示例数据: Store,URL,Price Walmart,http://www.walmart.com/ip/HP-11.6-Stream-Laptop-PC-with-Intel-Celeron-Processor-2GB-Memory-32GB-Hard-Drive-Windows-8.1-and-Microsoft-O
Store,URL,Price
Walmart,http://www.walmart.com/ip/HP-11.6-Stream-Laptop-PC-with-Intel-Celeron-Processor-2GB-Memory-32GB-Hard-Drive-Windows-8.1-and-Microsoft-Office-365-Personal-1-yr-subscription/39073484
Walmart,http://www.walmart.com/ip/Nextbook-10.1-Intel-Quad-Core-2-In-1-Detachable-Windows-8.1-Tablet/39092206
Walmart,http://www.walmart.com/ip/Nextbook-10.1-Intel-Quad-Core-2-In-1-Detachable-Windows-8.1-Tablet/39092206
在同一CSV中,我无法将该价格写入相邻的C列(标题=价格)
require 'nokogiri'
require 'open-uri'
require 'csv'
contents = CSV.open "mp_lookup.csv", headers: true, header_converters: :symbol
contents.each do |row|
row_url = row[:url]
goto_url = Nokogiri::HTML(open(row_url))
new_price = goto_url.css('meta[itemprop="price"]')[0]['content']
#----
#In this section, I'm looking to write the value of new_price to the 3rd column in the same CSV file
#----
end
在过去,我能够使用:
in_file = open("mp_lookup.csv", 'w')
in_file.write(new_price)
但在这种情况下,这似乎不起作用
感谢您的帮助 简单的答案是,您可以参考CSV文件中的
:price
列,就像您参考:url
列一样。请尝试以下代码在内存中的CSV对象中设置价格:
row[:price] = new_price
读完所有记录后,您将希望再次保存CSV文件。您可以将其保存为任何文件名,但在本例中,我们将简单地覆盖上一个文件:
CSV.open("mp_lookup.csv", "wb") do |csv|
contents.each do |row|
csv << row
end
end
CSV.open(“mp_lookup.CSV”、“wb”)do|CSV|
contents.do每行|
csv您必须为此使用csv吗?CSV是一种可变记录长度格式,因此更改一行通常意味着逐行复制文件,并沿途更改所需的行。CSV是一种很好的数据交换格式,但它是一个糟糕的数据库。我想我不必这样做。我看过File.open、File.readlines.each、line.split(',')[1]等代码。你认为这样做会更好吗?我刚刚意识到我应该澄清我必须使用CSV或文本文件,但我不一定要使用CSV gem或其他任何东西。不管你使用文件
或CSV
,你最终还是会逐个记录地读取文件记录,更改需要更改的记录,然后再将它们全部写出来。或者将您的CSV导入SQLite数据库,在SQLite中完成您的工作,然后在完成后将结果转储到CSV。感谢您的帮助。我将研究使用SQLite