我有一个 txt 文件转储,其中包含以下行格式的数据:
2015/01/01-01:00:00, {'a50': 15.5, 'a95': 14.5, 'a99': 21.5}
我想提取值并将其转换为以下格式的 CSV:
2015/01/01, 15.5, 14.5, 21.5
到目前为止,我可以读取文件并提取数据,我还可以使用正则表达式获取时间戳值(但我知道 Go 中的正则表达式非常慢),我避免做更多的正则表达式来提取剩余的值。有什么指点吗?
最佳答案
如果时间允许,我可能会根据需要使用代码示例跟进此问题,但这里是我将如何处理该问题的基本纲要。
1) 创建一个类似下面的类型来保存您的数据;
type line struct {
A50 float64 `json:"a50"`
A95 float64 `json:"a95"`
A99 float64 `json:"a99"`
}
2)逐行读取输入
3) 对每一行使用 strings.Index 获取第一个逗号的索引
4) 将字符串的后半部分传递到 json.Unmarshal 中;
err := json.Unmarshal([]byte(line[20:]), &MyInstance)
5) 像这样使用 Sprintf 将所需的输出写入磁盘或缓冲区;
output := fmt.Sprintf("%s, %f, %f, %f\n", line[0:20], MyInstance.A50, MyInstance.A95, MyInstance.A99)
编辑:注意到一个小错误。您正在从日期时间中删除时间部分,您可以通过使用 strings.Index 并再次进行子 slice 或 - 上的 strings.Split 来获得它code> 分隔两个标记。
我应该指出的另一件事是我没有包含任何文件处理代码。您处理该问题的方式取决于您的需求。例如,如果它是少量数据,我可能会将所有输出保存在内存中,然后在最后将其写入磁盘,因为如果数据源很大,你将不得不以流方式完成所有这些工作(意味着每一行都独立于其他行进行处理)。
关于csv - 戈朗 : convert text dump to CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959146/
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda
我在Rails3.1项目中有以下助手-我只是想知道是否有办法测试CSV.generate调用。我很想说我知道如何去做,但事实是我什至不知道从哪里开始。任何想法表示赞赏。require'csv'moduleAdmin::PurchasesHelperdefcsv_purchase_listcolumns=['course','amount','first_name','last_name','contact_phone','contact_mobile','created_at']CSV.generate(:col_sep=>";",:row_sep=>"\r\n",:headers=>
在Ruby1.9中,我如何从ARGF中读取CSV?我尝试了以下方法,但没有打印任何内容:require'csv'CSV(ARGF).readdo|row|prowendhttp://www.ruby-doc.org/core-1.9.3/ARGF.htmlhttp://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html 最佳答案 如果你想偷懒你可以试试:CSV.new(ARGF.file).eachdo|row|...end来源:http://www.ruby-doc.org/std
有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|
我的问题很简单:我是否必须在使用RubyonRails的类上require'csv'?如果我打开一个railsconsole并尝试使用CSVgem它可以工作,但我必须在文件中这样做吗? 最佳答案 CSVlibrary是ruby标准库的一部分;它不是gem(即第三方库)。与所有标准库(与核心库不同)一样,csv不会由ruby解释器自动加载。所以是的,在您的应用程序中某处您确实需要要求它:irb(main):001:0>CSVNameError:uninitializedconstantCSVfrom(irb):1from/Us
我想在herokucedar上使用带有rails3.2.1的CSV模块,但是require'CSV'没用这是使用控制台测试时的错误:Loadingproductionenvironment(Rails3.2.1)irb(main):001:0>require'CSV'LoadError:nosuchfiletoload--CSVfrom/app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.1/lib/active_support/dependencies.rb:251:in`require'from/app/vendor/bundle
给定以下CSV文件,您将如何删除列“foo”中包含单词“true”的所有行?Date,foo,bar2014/10/31,true,derp2014/10/31,false,derp我有一个可行的解决方案,但它需要制作一个辅助CSV对象csv_no_foo@csv=CSV.read(@csvfile,headers:true)#http://bit.ly/1mSlqfA@headers=CSV.open(@csvfile,'r',:headers=>true).read.headers#MakeanewCSV@csv_no_foo=CSV.new(@headers)@csv.eachd