如何从 csv 复制到 postgresql table 并忽略没有 header 的列
How copy from csv to postgresql table and ignore columns without header
我在 python 中有一个基本上具有此工作流程的脚本
- 接收带有 header 的 csv。
- 在 PostgreSQL 上的数据库上创建 table,其中字段是 header 的 csv。
- 将csv的数据复制到step2中创建的table
这里是第 3 步的代码片段
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 输入的最后一列没有 header,并且上面的代码失败
File "copy_to_psql.py", line 18, in load_csv_psql
cur.copy_expert(sql=copy_sql % table,file = file_object)
psycopg2.DataError: extra data after last expected column
有没有办法只 select 来自 csv 的 header 列?
是否有仅使用 PostgreSQL 的解决方案?
还有其他建议吗?
提前致谢
如@ABAbhi 所述,我最好的选择是清理 csv。
因此,在我的算法工作流程中,我添加了一个步骤来删除没有
的列
- 接收带有 header.
的 csv
- 在字段所在的 PostgreSQL 数据库上创建一个 table
csv 的 headers.
- 删除没有 header 的列。
- 将数据csv复制到table步骤2
中创建的
这里是第 3 步的代码:
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)
我在 python 中有一个基本上具有此工作流程的脚本
- 接收带有 header 的 csv。
- 在 PostgreSQL 上的数据库上创建 table,其中字段是 header 的 csv。
- 将csv的数据复制到step2中创建的table
这里是第 3 步的代码片段
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 输入的最后一列没有 header,并且上面的代码失败
File "copy_to_psql.py", line 18, in load_csv_psql
cur.copy_expert(sql=copy_sql % table,file = file_object)
psycopg2.DataError: extra data after last expected column
有没有办法只 select 来自 csv 的 header 列?
是否有仅使用 PostgreSQL 的解决方案?
还有其他建议吗?
提前致谢
如@ABAbhi 所述,我最好的选择是清理 csv。
因此,在我的算法工作流程中,我添加了一个步骤来删除没有
的列- 接收带有 header. 的 csv
- 在字段所在的 PostgreSQL 数据库上创建一个 table csv 的 headers.
- 删除没有 header 的列。
- 将数据csv复制到table步骤2 中创建的
这里是第 3 步的代码:
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)