如何使用python基于CSV自动创建表及其列
这是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
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()
查看变量中的值以及执行代码的哪一部分。这被称为“打印调试”。