csv - 戈朗 : convert text dump to CSV

标签 csv go

我有一个 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/

相关文章:

python - 如何从分层 csv 生成平面文件 (?)

xml - 在 Go 中解析 SOAP

html - 去使用下拉值

arrays - GO中嵌套的JSON数组生成

dictionary - golang线程安全映射, channel 作为线程安全的值

xml - XSLT 2.0 将 CSV 转换为 XML 格式

python - 列表的数组 Python

csv - 错误: SQLite import data from file

php - CSV 到 MYSQL 解析问题

go - 如何组合 sha 哈希值?