将多个.csv文件加载到一个表中,并根据.csv -postgres

时间:2017-09-01 11:08:11

标签: postgresql csv

Heyho。我正在使用Postgresql 9.5,我在一个问题上绝望。 我有多个.csv-Files(40),所有这些都有相同的columncount和-names。我现在想将它们导入到一个表中,但我想要一个每个.csv文件的ID。是否可以在postgres中实现自动化? (包括添加新的id列)以及如何?

方法可能如下所示:

test1.csv ==> table_agg ==> set ID = 1
test2.csv ==> table_agg ==> set ID = 2
.
.
.
test40.csv ==> table_agg ==> set ID = 40

如果有人可以帮助我,我会很高兴

2 个答案:

答案 0 :(得分:0)

添加一个表格,其中包含您要添加到每个数据集的文件名和其他信息。添加serial列,您可以将其用作数据表中的外键,即数据集标识符。

创建数据表。添加外键字段以引用另一个表中的数据集条目。

使用Python脚本解析csv文件并将其导入数据库。首先将条目添加到数据集表。然后确定数据集ID并将行插入到数据表中,并设置相应的数据集ID。

答案 1 :(得分:0)

我的简单解决方案是在Python中为每个.csv文件分配一个ID,并将所有.csv文件输出到一个。

import glob, os, pandas as pd

path =r'PathToFolder'
# all .csv-files in this folder
allFiles = glob.glob(path + "/*.csv")

# safe DFs in list_
list_ = []
# DF for later concat
frame = pd.DataFrame()
# ID per DF/.csv
count = 0

for file_ in allFiles:

    # read .csv-files
    df = pd.read_csv(file_,index_col=None,skiprows=[1], header=0)
    # new column with ID per DF
    df['new_id'] = count
    list_.append(df)
    count = count + 1

frame = pd.concat(list_)
frame.to_csv('PathToOuputCSV', index = False)

继续使用SQL:

CREATE TABLE statement..
COPY TABLE_NAME FROM 'PathToCSV' DELIMITER ',' CSV HEADER;