首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Vim快速地将CSV文件重新格式化为SQL格式?

如何用Vim快速地将CSV文件重新格式化为SQL格式?
EN

Stack Overflow用户
提问于 2013-11-04 18:57:10
回答 4查看 455关注 0票数 2

我有一个CSV文件,我需要格式化(即,转换成)一个SQL文件,以便将其摄取到MySQL中。我正在寻找一种将文本分隔符(单引号)添加到文本中的方法,但不添加到数字、布尔等。我发现这很困难,因为我需要在单引号中包含的一些文本本身有逗号,因此很难输入逗号进行搜索和替换。下面是我正在使用的一个示例行:

代码语言:javascript
复制
1239,1998-08-26,'Severe Storm(s)','Texas,Val Verde,"DEL RIO, PARKS",'No',25,"412,007.74"

这是FEMA数据文件,有131246行,我从data.gov中得到了我想要进入MySQL数据库的内容。正如你所看到的,我需要在得克萨斯州之后和瓦尔维德之前插入一个单引号,所以我试着:

代码语言:javascript
复制
s/,/','/3

但这只取代了文件前三行中逗号的第一次出现。一旦我过去了,我将需要找到一种方法来处理"DEL RIO,PARKS",因为它有一个逗号,我不想在这里加一个引号。

那么,是否有一种“很好”的方法来操作这些数据,使其从普通的CSV格式转换为适当的SQL格式?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-05 22:05:13

为了结束这个过程,我使用了@的想法,这是MySQL load data选项:

代码语言:javascript
复制
LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE MYTABLE FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';

最初的.csv文件仍然需要一些按摩,但没有我手工做的那么多。

当我评论说加载数据截断了我的文件时,我是不正确的。我将该文件视为一个典型的.sql文件,并假定我添加的"ID“列将自动递增。事实证明事实并非如此。我必须创建一个快速脚本,在每一行前面加上一个ID。之后,LOAD DATA命令对我文件中的所有行都有效。换句话说,在加载之前,所有数据都必须放在文件中才能加载,否则加载将无法工作。

再次感谢所有的回答,并@埃里克安德烈斯,他的想法,我最终使用了。

票数 0
EN

Stack Overflow用户

发布于 2013-11-05 04:40:43

众所周知,CSV文件的解析风险很大。不同的程序以不同的方式输出CSV,可能包括在引用字段中嵌入新行或在引用字段中表示引号的不同方式。最好是使用一个专门适合解析CSV的工具-- perl、python、ruby和java都有CSV解析库,或者有命令行程序,比如csvtool或ffe。

如果使用脚本语言的CSV库,也可以利用该语言的SQL导入。这对于一次性的数据来说是过分的,但是如果您以这种方式导入了大量数据,或者如果您正在转换数据,这可能是值得的。

我还想做一些故障排除,以找出为什么将CSV导入到MYSql失败。

票数 2
EN

Stack Overflow用户

发布于 2013-11-04 21:31:51

我会采取这样的方法:

:%s/,(“^”*“x^,"*)/,'\1'/g

:%s/^(“^”*,“*”)/‘1’/g

在单词中,查找一组双引号字符集,或者是一组以逗号开头的非双引号字符集,并在单引号中替换这组字符。

接下来,对于一行中的第一列,查找一组双引号字符集,或者是一组以逗号开头的非双引号字符集,并替换单引号中的字符集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19774985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档