我有一个python脚本,基本上有如下工作流程
这里是第三步的代码片段
file_object = open(file_csv)
cur = connection.cursor()
copy_sql = """
COPY %sFROM stdin WITH CSV HEADER
DELIMITER as '""" + delimiter +"'"
cur.copy_expert(sql=copy_sql % table,file = file_object)
connection.commit()
cur.close()
这个脚本工作正常,但有些csv输入的最后一列没有页眉,上面的代码失败了。
文件 "copy_to_psql.py",第18行,在load_csv_psql中。
cur.copy_expert(sql=copy_sql % table,file = file_object)
psycopg2.DataError: 在最后一列预期的数据之后有额外的数据。
有什么方法可以只选择csv中带头的列?
有没有只用PostgreSQL的解决方案?
有其他建议吗?
先谢谢你
正如 @ABhi 所说,我最好的选择是清理 csv。
因此,我的算法的工作流程,我添加了一个步骤,以删除列没有
而这里是第三步的代码。
def remove_empty_colums(input_csv="in.csv", output_csv="out.csv", delimiter=','):
reader = csv.DictReader(open(input_csv), delimiter=delimiter)
headers = reader.fieldnames
writer = csv.DictWriter(open(output_csv, 'wb'),
fieldnames=headers, delimiter=delimiter)
writer.writeheader()
for row in reader:
row_dict = {}
for header in headers[:-1]:
row_dict[header] = row[header]
writer.writerow(row_dict)