python pandas从excel中获取数据

import xlrd
from xlrd import xldate_as_tuple
from datetime import datetime
import pandas as pd
from sqlalchemy import create_engine


def ordfun(zimu):
return ord(zimu)-65
def realnum(shuzi):
return shuzi-1

def getDate(sheet,row,column):
cell = sheet.cell_value(realnum(row), ordfun(column))
val = datetime(*xldate_as_tuple(cell, 0)).strftime('%Y/%m/%d') # '%Y/%m/%d %H:%M:%S'
return val

def nvl(input):
if input is None or input=='':
return 0
else:
return int(eval(str(input).replace('=','')))

def intoDB(df,tableName):
db_engine = create_engine('postgresql+psycopg2://'+'gpadmin'+':'+'gpadmin'+'@'+str('10.39.4.175') + '/' + 'pissh')
pd.io.sql.to_sql(df,tableName,db_engine,if_exists='append',index = False)

#获得数据库连接
def getEngine():
db_engine = create_engine('postgresql+psycopg2://'+'gpadmin'+':'+'gpadmin'+'@'+str('10.39.4.175') + '/' + 'pissh')
return db_engine


wb = xlrd.open_workbook('E://广东空调/PISSH共有_20190730/P1_2次_CU1线(A勤)2.xlsx')
#声明一个list空列表
listAll = []

#遍历所有的sheet
for i in range(1,32):
sheet=wb.sheet_by_name(str(i))
checkcellvalue=sheet.cell(realnum(28),ordfun('N')).value
#print('sheetname:%r,检查值为:%r' % (str(i),checkcellvalue))
if checkcellvalue is None or checkcellvalue=='':
continue
try:
dict = {'cal_date': getDate(sheet,5,'C')
, 'project_name': sheet.cell(realnum(5),ordfun('F')).value
, 'class': sheet.cell(realnum(5),ordfun('H')).value
, 'plan_num': sheet.cell(realnum(28),ordfun('N')).value
, 'real_num': sheet.cell(realnum(29),ordfun('N')).value
, 'overtime_plan_num': nvl(sheet.cell(realnum(28),ordfun('Q')).value)
, 'overtime_real_num': nvl(sheet.cell(realnum(29),ordfun('Q')).value)}
except:
"从sheet生成字典出错,错误地点为:%r"% sheet.name

listAll.append(dict)

df = pd.DataFrame(listAll)
cols=['cal_date','class','project_name','plan_num','real_num','overtime_plan_num','overtime_real_num']
df=df.ix[:,cols]#按顺序将dataframe输出

#获得引擎
engine = getEngine()

allDict = df.to_dict(orient='records')
for row in allDict:
print(tuple(row.values()))
table= '"PAPAGZ_KPI_COMPREHENSIVE_RATE_DATA"'
# 获取到一个以键且为逗号分隔的字符串,返回一个字符串
keys = ','.join(row.keys())
values = ','.join(['%s'] * len(row))
sql = 'INSERT INTO {table}({keys}) VALUES{values}'.format(table=table, keys=keys, values=tuple(row.values()))
try:
pd.io.sql.execute(sql,engine)
except Exception as e:
print("捕捉到异常,exp=",e)

猜你喜欢

转载自www.cnblogs.com/zhangwensi/p/11290352.html
今日推荐