在python中读取和写入csv文件时出错

时间:2017-05-18 08:04:30

标签: python mysql csv

我有一个python代码,我从csv文件读取数据并将其内容推送到MySQL。我收到了上面提到的错误。这是代码:

csv_data = csv.reader('ga_python_data.csv')
csv_data = csv.reader('data.csv')

for row in csv_data:
    cursor.execute('INSERT INTO new (date,sessions) VALUES (%s, %s)',*row)

错误是:

TypeError: not enough arguments for format string.

3 个答案:

答案 0 :(得分:0)

@MartinEvans关于缺失参数的评论是正确的:

  

目前你有一个参数行,但你有两个%s指定。您需要在行之后添加第二个参数。

如果row包含您要插入的两个字符串,则需要将其解压缩,如*row

在这种情况下,您的代码将如下所示:

cursor.execute("INSERT INTO metrics VALUES ('%s', '%s')", *row)

答案 1 :(得分:0)

问题是因为你的行是一个字符串,而你正试图粘贴两个字符串。你可能应该这样做:

tokens=row.split(',')
cursor.execute(....., tokens[0],tokens[1])

答案 2 :(得分:0)

目前您有一个参数行,但您有两个%s说明符。您需要在行之后添加第二个参数。在您的情况下,您正在从CSV文件中读取条目。从理论上讲,每行应始终有两个项目,但如果您的CSV文件有一个空行,或者其中一行缺少一个条目,则会导致问题。此脚本仅接受包含两个值的行:

import MySQLdb
import csv

# ...first connect to db and create cursor

with open('data.csv', 'rb') as f_data:
    csv_data = csv.reader(f_data)
    #header = next(csv_data)  # optionally skip over a header line 

    for row in csv_data:
        if len(row) == 2:
            cursor.execute('INSERT INTO new (date,sessions) VALUES (%s, %s)', tuple(row))    

最后,确保正确打开文件非常重要。在Python 2.x中,必须以二进制模式打开文件。如果您使用的是Python 3.x,则需要按如下方式更改行:

with open('data.csv', 'r', newline='') as f_data: