【发布时间】:2014-10-02 14:32:13
【问题描述】:
我的 python csv 解析器出现问题,我不知道错误发生在哪里:
这是我的蟒蛇:
# -*-coding:Utf-8 -*
import sqlite3;
from datetime import datetime, date;
conn = sqlite3.connect('info_max.sqlite3')
conn.text_factory = str
c = conn.cursor()
c.execute('drop table if exists info_max')
c.execute('create table info_max(id_huiles text, name_fr text, name_ln text, img text, mode_obt text, bien_vertus text, bio text)')
def mysplit(string):
quote = False
retval = []
current = ""
for char in string:
if char == '"':
quote = not quote
elif char == ',' and not quote:
retval.append(current)
current = ""
else:
current += char
retval.append(current)
return retval
# Lit de ligne en ligne, en sautant la première ligne
rawdata = open("info_max_try.csv", "r").read()
data = rawdata.split("\n", 1)[1:]
data = re.split('"END"', rawdata)
print(data)
for entry in data:
# Parse les valeurs
vals = mysplit(entry.strip())
# Convertit les strings format heure au format standard sqlite3
# Insert la ligne
vals[0] = int(vals[0])
print "Inserting %s..." %(vals[0])
print "The enrty is : %s" %entry
sql = "insert into info_max values(?, ?, ?, ?, ?, ?, ?)"
c.execute(sql, vals)
# Done !
conn.commit()
我的.csv 看起来像这样:
"id_huiles","name_fr", "name_ln", "img", "mode_obt", "bien_vertus","bio"
"77", "Basilic", "Basilium", "Basilic.png", "some_text", "some_text", "0"
...
我在 3 个条目后得到了这个错误:
File "parseAromaHuile.py", line 39, in <module>
c.execute(sql, vals)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 7, and there are 6 supplied.
编辑
我的行中有\n。我修改了我的代码,但我不希望我的解析器读取我的第一行
违规行如下所示:
"6","Bergamote", "Citrus bergamis L.", "bergamote.png", "some_text", "some_text\n other_text\n more_text","0"
感谢您的帮助!
【问题讨论】:
-
我不知道为什么有人投票关闭它,恕我直言,我很好地记录了我的问题,令人讨厌的行为是我不想要这个错误..我希望我的 7 列被填满
-
您应该考虑在 python 中使用 csv 模块,而不是自己手动解析。除此之外,在没有看到实际失败行的数据的情况下,我们几乎无能为力 - 自然的假设显然是无论出于何种原因,该行仅包含 6 个条目,或者您的解析器会导致这种情况发生。
-
我的解析器对一切都很好,我刚刚创建了一个新的 CSV 并且发生了这种情况
-
在执行 sql-insert 之前添加一个
print len(vals)。 -
是的,我的行只有 6 列。我没有检测到错误,是否有可能,如果文本太长,python/sqlite 会拒绝它?