我想将CSV文件中的电子邮件列表导入sqlite。当我将其导入sqlite时,CSV还不包含引号,它会为数据添加引号。有更好的进口方式吗?
到目前为止,我一直在做:
.mode csv
.header on
.import "email.csv" emailDatabase
然而,通过这样做,当我搜索emailDatabase时,数据有"参赛作品。
一个例子。
CSV文件包含以下电子邮件:
abc@yahoo.com
def@gmail.com
但是,使用上述方法导入时,表格将导致:
" abc@yahoo.com"
" def@gmail.com"
注意"用于包装每行的数据,并在第一个"之后包含一个空格。如何进行导入以便不添加报价?
答案 0 :(得分:2)
我正在做一些测试,并意识到如果CSV文件的标题在开头包含空格,sqlite将添加引号,因为它认为该空间应该包含在名称中。
e.g。
Email
abc@gmail.com
def@yahoo.com
(注意电子邮件前的空格和数据)如果在sqlite中导入为:
" Email"
" abc@gmail.com"
" def@yahoo.com"
但是,如果标题在不添加引号之前不包含单个空格,而是显示为:
Email
abc@gmail.com
def@yahoo.com
请注意实际数据前的空格。数据仍然包含空格,但sqlite不会在它们周围添加引号。
我不确定为什么会这样,但事情就是如此。
答案 1 :(得分:0)
从.csv文件导入城市名称时出现相同的问题。 .import将弗吉尼亚海滩写成“弗吉尼亚海滩”。希望我能提供比Python程序更好的答案,但是(就其价值而言)就在这里。
#!/usr/bin/python
import csv
import sqlite3
conn = sqlite3.connect("test.db")
conn.execute("CREATE TABLE cities(name TEXT, population INTEGER)")
with open("cities.csv", "r") as ifile:
reader = csv.reader(ifile, delimiter = ",")
for record in reader:
sql = "INSERT INTO cities (name, population) VALUES('{0}',{1})".format(record[0], record[1])
conn.execute(sql)
conn.commit()
conn.close()