您的位置:首页 > 数据库 > MySQL

csv到mysql数据库如何分割

2013-10-27 16:18 295 查看
这两天修改一个取XML文件存入到CSV,然后再存入到mysql的bug,bug是XML文件里面有个name字段,存入CSV文件里面的时候我们用“|”,来分割字段。但是name里面有时候也有“|”,这样就出现了问题,存入数据库对不上字段了。
开始的时候我试着把“|”换成“`”,但是测试发现名字中也有“`”,后来想加多两个分割符,无奈CSV导出只支持一位
csv.writer(f,delimiter=','),delimiter=','只能是一位。
再后来想干脆在名称后面都手动加上个“|”,例如本来是((“1”,“Test”,"OK"),("2","Test2","OK")
我加上“|”,变成((“1|”,"Test|",“OK”),("2|","Test2|",“OK”)),分割符是“,”,那么在CSV文件里面就成了
1|,Test|,OK
2|,Test2|,OK
这样在导入mysql时候设置分割符为“|,”,就可以搞定了。
愿望是美好的,现实是残酷的,还是失败。如果Name有“,”,CSV文件会变成
1|,“Tes,t|”,OK
2|,Test2|,OK
存入数据库name变为““Tes,t|”,OK”,字段中有和分割符一样的,就会加上“”来区分。
后来查CSV存入的方法,发现可以设置分割符。见http://docs.python.org/2/library/csv.html?highlight=csv
我设置为csv.writer(f,delimiter=',',quotechar='"',quoting=csv.QUOTE_ALL)
这样每个字段我都加上““”,然后以","隔开。
在文件导入mysql的时候正好也有对应的分割符和去掉””“的方法。名称中出现【“,”】的概率不大
见http://dev.mysql.com/doc/refman/5.1/en/load-data.html

LOADDATAINFILE'data.txt'INTOTABLE[code]tbl_name

FIELDSTERMINATEDBY','ENCLOSEDBY'"'[/code]
“TERMINATEDBY”就是以哪个字符分割

“ENCLOSEDBY”就是字段被哪个字段包围


大功告成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: