如何从csv复制到postgresql表并忽略没有标题的列
我有一个python脚本,基本上有这个工作流如何从csv复制到postgresql表并忽略没有标题的列,postgresql,python-2.7,csv,psycopg2,postgresql-copy,Postgresql,Python 2.7,Csv,Psycopg2,Postgresql Copy,我有一个python脚本,基本上有这个工作流 接收带有标题的csv 在PostgreSQL上的数据库上创建表,其中字段是csv的标题 将csv的数据复制到步骤2中创建的表中 这里是步骤3的代码片段 file_object = open(file_csv) cur = connection.cursor() copy_sql = """ COPY %sFROM stdin WITH CSV HEADER DELIMITER as '""" + delimiter +"'" cur.c
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的解决方案
还有其他建议吗
提前感谢您提到@ABAbhi,我最好的选择是清理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)
提到@ABAbhi,我最好的选择是清理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)
如果系统中安装了Java,请尝试使用DBIS。我认为它不能取代表格创建过程。但您可以将其配置为通过将名称与列名匹配,将数据从csv放置到数据库。您可以扩展一些Java特性并编写定制代码@谢谢你的建议,我认为我可以用java解决这个问题,但我只想用python和PostgreSQL解决这个问题。我想我只能用标题栏创建一个新的csv,但我正在寻找一个更直接的解决方案。清理csv是最好的选择。@Abhishakegupta我有一个清理csv的解决方案,但我试图看看是否有其他选择,但正如您所说,这似乎是最好的选择。@Cyberguille我建议使用Java解决方案,因为您只需配置无需编码即可替代python要求。如果您想通过PostgreSQL实现,那么导入CSV命令行如何?是的,您应该有所需的列名,动态是不可能的。如果系统中安装了Java,请尝试使用DBIS。我认为它不能取代表格创建过程。但您可以将其配置为通过将名称与列名匹配,将数据从csv放置到数据库。您可以扩展一些Java特性并编写定制代码@谢谢你的建议,我认为我可以用java解决这个问题,但我只想用python和PostgreSQL解决这个问题。我想我只能用标题栏创建一个新的csv,但我正在寻找一个更直接的解决方案。清理csv是最好的选择。@Abhishakegupta我有一个清理csv的解决方案,但我试图看看是否有其他选择,但正如您所说,这似乎是最好的选择。@Cyberguille我建议使用Java解决方案,因为您只需配置无需编码即可替代python要求。如果您想通过PostgreSQL实现,那么导入CSV命令行如何?是的,你应该有必要的列名,动态将是不可能的。