我有一个包含38列的CSV文件。我正在尝试使用Python的MySQLdb库将其插入到具有39列的MySQL表(已存在,没有记录)中(第1个是不是CSV的唯一num id)。 我的下面的脚本给了我一个错误......
row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[
10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row
[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], ro
w[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], r
ow[37], row[38],)
IndexError: list index out of range
值得注意的是,CSV中的几个列的第一个记录(行)是空白的,我没有导入标题(字段名称)行,因为实际记录从第7行开始。任何想法为什么我收到错误而没有数据。
import csv
import MySQLdb
csv.register_dialect('pipes', delimiter='|')
mydb = MySQLdb.connect(host='localhost',
user='root',
passwd='****',
db='artefacts')
cursor = mydb.cursor()
csv_data = csv.reader(file('$MT_pipe_.csv'), dialect = 'pipes')
for idx, row in enumerate(csv_data):
if idx > 5:
cursor.execute('INSERT INTO `nettop_master` VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,)',
row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11],
row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21],
row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31],
row[32], row[33], row[34], row[35], row[36], row[37], row[38],)
#close the connection to the database.
else:
continue
mydb.commit()
cursor.close()
更新
我已经更改了我的代码,但现在我仍然收到错误,第一个“日期”列出现在MySQL表中,该表必须接受空白的第一行。我认为,至少对于日期来说,该字段的第一行是空白的事实是抛出这样的错误......
_mysql_exceptions.OperationalError: (1292, "Incorrect date value: ' ' f
or column 'shortfilename_mdate' at row 1")
这是我最新的代码......
import csv
import MySQLdb
csv.register_dialect('pipes', delimiter='|')
mydb = MySQLdb.connect(host='localhost',
user='root',
passwd='****',
db='artefacts')
cursor = mydb.cursor()
dir = "C:\\Users\**\\\Documents\\webapp_1010\\cyber\\"
csv_data = csv.reader(file('$MT_pipe_.csv'), dialect = 'pipes')
for idx, row in enumerate(csv_data):
if idx <= 6:
pass
else:
cursor.execute("INSERT INTO `artefacts`.`nettop_master`\
(`evidence_id`, `entry`, `sequence_nbr`, `parent`, `parent_sequence_nbr`, `SI_mdate`,
`SI_mtime`, `SI_adate`, `SI_atime`, `SI_cdate`, `SI_ctime`, `SI_bdate`, `SI_btime`, `FN_mdate`,
`FN_mtime`, `FN_adate`, `FN_atime`, `FN_cdate`, `FN_ctime`, `FN_bdate`, `FN_btime`, `typeof`,
`extension`, `size`, `name`, `path`, `symbolic_link`, `object_id`, `ads_metadata`,`time_warning`,
`shortfilename_mdate`, `shortfilename_mtime`, `shortfilename_adate`, `shortfilename_atime`,
`shortfilename_cdate`, `shortfilename_ctime`, `shortfilename_bdate`, `shortfilename_btime`,
`extracted_filepath`)\
VALUES (1, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s,
%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", row)
#close the connection to the database.
mydb.commit()
cursor.close()
答案 0 :(得分:2)
Python中的索引从 0 开始。
因此,如果row
的{{1}} len
38
,则可以将row[0]
编入索引row[37]
。因此,您尝试索引row[38]
会导致您看到的错误。