将csv加载到列表但跳过换行符

时间:2018-02-28 11:59:33

标签: python list csv

尝试将csv加载到数据库中。

def csvtolist(path):
    with open(path, 'r') as f:
        reader = csv.reader(f)
        return list(map(tuple,reader))

for file in os.listdir(directory):
    filename = os.fsdecode(file)
    params =csvtolist(os.path.join(os.fsdecode(directory), filename))
    print(params)         
    cursor.executemany("INSERT into PRODUCTSTRUCTURE values (?,?,?,?,?,?,?,?);",params)

我得到并且错误,因为序列包含换行符:

    cursor.executemany("INSERT into PRODUCTSTRUCTURE values (?,?,?,?,?,?,?,?);",params)
pyodbc.ProgrammingError: ('The SQL contains 8 parameter markers, but 9 parameters were supplied', 'HY000')

print(params)与不需要的第9个\n的序列示例:

('MilhoSP', 'BR001', '', '', '', '', '', '', '\n')

2 个答案:

答案 0 :(得分:2)

只做

cursor.executemany("INSERT into PRODUCTSTRUCTURE values (?,?,?,?,?,?,?,?);",params[:-1])

params[:-1]可以获得除最后一个之外的所有内容,在您的情况下是第9个。

<强>替代:

根据有用的评论,使用params[0:8]将始终为您提供8个元素。即使CSV文件更改了列数,这也是未来的证据。

答案 1 :(得分:0)

在将参数传递给SQL语句之前,您可以执行类似的操作:

params = tuple(x for x in params if x != '\n')