如何使用python基于CSV自动创建表及其列

如何使用python基于CSV自动创建表及其列,python,csv,automation,python-import,sqldatatypes,Python,Csv,Automation,Python Import,Sqldatatypes,这是CSV的代码片段 Column Header Values LGA_CODE_2016 LGA10050 Median_age_persons 39 Median_mortgage_repay_monthly 1421 Median_tot_prsnl_inc_weekly 642 Median_rent_weekly 231 Med

这是CSV的代码片段

Column Header                   Values
LGA_CODE_2016                   LGA10050    
Median_age_persons              39  
Median_mortgage_repay_monthly   1421    
Median_tot_prsnl_inc_weekly     642 
Median_rent_weekly              231 
Median_tot_fam_inc_weekly       1532    
Average_num_psns_per_bedroom    0.8 
Median_tot_hhd_inc_weekly       1185    
Average_household_size          2.3
我有200多个CSV,它们具有数据类型的组合,例如Varchar、Integer、Float
每个表的第一列必须是主键。(即如上所述的LGA_代码_2016)

这是我试过的代码

import csv
import psycopg2
import os
import glob
import re

conn = psycopg2.connect("host= hostnamexx dbname=dbnamexx user= usernamexx password= 
pwdxx")
print("Connecting to Database")

csvPath = "./TestDataLGA/"

# Loop through each CSV
for filename in glob.glob(csvPath+"*.csv"):
    # Create a table name
    tablename = filename.replace("./TestDataLGA\\", "").replace(".csv", "")
    print tablename

    # Open file
    fileInput = open(filename, "r")

    # Extract first line of file
    firstLine = fileInput.readline().strip()

    #Extract seconf line of file
    secondLine = fileInput.readline()

    # Split columns into an array [...]
    columns = firstLine.split(",")
    colvals = secondLine.split(",")
     

    # Build SQL code to drop table if exists and create table
    sqlQueryCreate = 'DROP TABLE IF EXISTS '+ " abs.ABS_" + tablename + ";\n"
    sqlQueryCreate += 'CREATE TABLE'+ " abs.ABS_" + tablename + "("

    # Define columns for table
    for column in columns:
        for dtype in colvals:
            dt = bool(re.match(r"^\d+?\.\d+?$", dtype))   
            if dtype.isdigit():
                dtype = "INTEGER"
                 
            elif dt == True:
                dtype = "FLOAT(2)"
                
            else:
                dtype = "VARCHAR(64)"
                
                
        sqlQueryCreate += column + " " + dtype + ",\n"
            
        
    sqlQueryCreate = sqlQueryCreate[:-2]
    sqlQueryCreate += ");"
    
    print sqlQueryCreate

    #cur = conn.cursor()
    #cur.execute(sqlQueryCreate)
    #conn.commit()
    #cur.close()
这是我得到的输出

DROP TABLE IF EXISTS  abs.ABS_G02_AUS_LGA;
CREATE TABLE abs.ABS_G02_AUS_LGA(LGA_CODE_2016 FLOAT(2),
Median_age_persons FLOAT(2),
Median_mortgage_repay_monthly FLOAT(2),
Median_tot_prsnl_inc_weekly FLOAT(2),
Median_rent_weekly FLOAT(2),
Median_tot_fam_inc_weekly FLOAT(2),
Average_num_psns_per_bedroom FLOAT(2),
Median_tot_hhd_inc_weekly FLOAT(2),
Average_household_size FLOAT(2));
PS C:\Python27\Scripts> 
如果我自己运行内部For循环,我会根据CSV获得正确的数据类型集,但当我尝试使用其他For循环运行它时,它只打印最后生成的数据类型,即所有列标题的Float(2)。 我还不知道把主键的代码放在哪里

有人能帮我解决这个问题吗

我尝试了几种排列和组合,将它们循环并使用Break命令。但似乎什么都不管用

PS:我正在处理测试数据,因此这里只能看到一个CSV文件输出。
这是我先前问题的延续

你有没有尝试过熊猫?@没有,我对熊猫不太了解。我对Python相当陌生。我想继续讲下去,因为我已经开始理解它了,除非Pandas会马上解决这个问题。如果你只得到最后一项,那么你可能有错误的缩进,在循环外运行一些代码,但应该在循环内运行。首先,你应该使用
print()
查看变量中的值以及执行代码的哪一部分。这叫做“打印调试”。你试过熊猫吗?@不,我不太了解熊猫。我对Python相当陌生。我想继续讲下去,因为我已经开始理解它了,除非Pandas会马上解决这个问题。如果你只得到最后一项,那么你可能有错误的缩进,在循环外运行一些代码,但应该在循环内运行。首先,你应该使用
print()
查看变量中的值以及执行代码的哪一部分。这被称为“打印调试”。