windows下python3 使用cx_Oracle,xlrd插件进行excel数据清洗录入
我们在做数据分析,清洗的过程中,很多时候会面对各种各样的数据源,要针对不同的数据源进行清洗,入库的工作。当然python这个语言,我比较喜欢,开发效率高,基本上怎么写都能运行,而且安装配置简单,基本上有网的环境pip install全部都搞定,没网的话,把whl包copy过来一行命令也就解决了(windows下python3.5使用pip离线安装whl包)。
本篇博客就针对,在windows平台下使用python3(python2社区将要停止支持,使用3是大势所趋),读取xls,xlsx格式的数据进行清洗入库做一个小例子。
初步业务流程
整个业务的流程十分简单:两个大的步骤
1. 读取xlsx数据进行清洗
2. cx_Oracle批量入库
建表语句:
create table temp_table
(
importtime varchar2(128),
carrier varchar2(32),
);
select * from temp_table
一个例子脚本:
# -*- coding: utf-8 -*-
import xlrd
import datetime
import cx_Oracle
import time
from itertools import islice
import os
os.environ['NLS_LANG']='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
LineName = ['1号线','2号线']
StationName = []
########################链接数据库相关######################################
def getConnOracle(username,password,ip,service_name):
try:
conn = cx_Oracle.connect(username+'/'+password+'@'+ip+'/'+service_name) # 连接数据库
return conn
except Exception:
print(Exception)
#######################进行数据批量插入#######################
def insertOracle(conn,data,input_file_name):
sheetnumber = getSheetNumber(data)
cursor = conn.cursor()
try:
for x in range(0,sheetnumber):
templist = excel_table_byindex(input_file_name,0,x)
cursor.prepare('insert into temp_table(importtime ,carrier) values(:1,:2)')
# 使用cursor进行各种操作,templist数值需要和表temp_table对应
cursor.executemany(None,templist)
conn.commit()
except cx_Oracle.DatabaseError as msg:
print(msg)
finally:
cursor.close()
conn.close()
###########################打开excel文件########################
def openXLS(path):
try:
data = xlrd.open_workbook(path)
return data
except Exception:
print(Exception)
def getSheetNumber(data):
sheet_num = len(data.sheets())
return sheet_num
#######################一些数据清洗工作########################
def getlineName(str):
for x in LineName:
if x in str:
return x
def getStationName(str):
for x in StationName:
if x in str:
return x
##########将excel中除去表头的一个sheet读出来,返回一个list#############
def excel_table_byindex(path,colnameindex = 0,by_index = 0):
today = time.strftime('%Y%m%d', time.localtime(time.time()))
data = openXLS(path)
table = data.sheets()[by_index]
nrows = table.nrows
ncols = table.ncols
colnames = table.row_values(colnameindex)
list = []
for rownum in range(1,nrows):
row = table.row_values(rownum)
temp_lineName = getlineName(row[6])
temp_stationName = getStationName(row[6])
if row:
app = [today, str(row[1]), str(row[2]),temp_stationName,temp_lineName]
# for i in range(len(colnames)):
# app[colnames[i]] = row[i]
list.append(app)
return list
###################一个可以从文件第二行开始读的办法#############
def getAllStationName(path):
StationName_file = open(path, 'r', encoding='utf-8')
#count = len(StationName_file.readlines())
for line in islice(StationName_file,1,None):
str_temp = line.strip('\n')
if str_temp not in LineName and str_temp !='----'and str_temp!='':
StationName.append(str_temp)
####################################################################
def getStationNamefromexcel(path):
data = openXLS(path)
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols
colnames = table.row_values(0)
list = []
for rownum in range(0,nrows):
row = table.row_values(rownum)[0]
if row:
list.append(row)
return list
#################################################################
def main():
username = 'xx'
password = 'xx'
ip = '192.168.1.1'
service_name = 'iop'
#获取数据库链接
conn = getConnOracle(username,password,ip,service_name)
input_file_name = (r"E:\code\python\findS\subwayBase\xx.xlsx")
#output_file_name = input("Enter the output file name:")
getAllStationName(r"E:\code\python\findS\subwayBase\站点.txt")
begin = datetime.datetime.now()
insertOracle(conn,openXLS(input_file_name),input_file_name)
# x.fetchone()
# c.close() # 关闭cursor
# conn.close() # 关闭连接
end = datetime.datetime.now()
print((end - begin).seconds)
if __name__ =='__main__':
main()
python3 windows下使用cx_Oracle操作oracle的报错问题
报错信息如下:
Traceback (most recent call last):
File "E:/code/python/findS/findSubwayBase.py", line 134, in <module>
main()
File "E:/code/python/findS/findSubwayBase.py", line 124, in main
insertOracle(conn,openXLS(input_file_name),input_file_name)
File "E:/code/python/findS/findSubwayBase.py", line 32, in insertOracle
cursor.executemany(None,templist)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-6: ordinal not in range(128)
Process finished with exit code 1
在使用python3 的cx_Oracle操作oracle数据时候,不可避免的会遇到中文的编码问题,当然,上网一搜全是python2的,解决方案是:
#在开头加上
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
python3中的解决方案为:加上核心代码
import os
os.environ['NLS_LANG']='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
就ok啦,其实就是设置一下客户端编码 ,参考:python编码 OS.ENVIRON详解
xlrd 操作excel
demo代码:
#获取一个工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u'Sheet1')#通过名称获取
#获取整行和整列的值(数组)
table.row_values(i)
table.col_values(i)
#获取行数和列数
nrows = table.nrows
ncols = table.ncols
#循环行列表数据
for i in range(nrows ):
print table.row_values(i)
#单元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
#使用行列索引
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
#简单的写入
row = 0
col = 0
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 value = '单元格的值'
xf = 0 # 扩展的格式化
table.put_cell(row, col, ctype, value, xf)
table.cell(0,0) #单元格的值'
table.cell(0,0).value #单元格的值'
参考链接
[OS.ENVIRON详解]: http://blog.csdn.net/junweifan/article/details/7615591
[python编码]:http://www.cnblogs.com/fkissx/p/5417363.html
再次强烈推荐,精通oracle+python系列:官方文档
http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python-1391323-zhs.html
离线版本下载链接:
http://download.csdn.net/detail/wangyaninglm/9815726
windows下python3 使用cx_Oracle,xlrd插件进行excel数据清洗录入的更多相关文章
- windows下python3.6 32bit 安装django
在Windows下python3.6安装Django1.11.3 1.首先下载地址:https://pypi.python.org/pypi/Django/1.11.3 pip install dja ...
- windows下python3.6安装pycryto or crypto or pycryptodome与使用
pycrypto,pycrytodome和crypto是一个东西,在很久以前,crypto在python上面的名字是pycrypto它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库: w ...
- Windows下python3登陆和操作linux服务器
一.环境准备 python3远程连接需要用到pycrytodome和paramiko库,其中后者依赖前者,所以按照顺序来安装 1. 安装pycrytodome 1 pip install pycryt ...
- Windows下python3生成UTF8的CSV文件和sha256sum踩坑记录
CSV的坑 在Ubuntu下是简单的写入完事 import csv ... with open(filename, 'w') as output: f = csv.writer(output) f.w ...
- Windows下Python3+nose+appium自动化测试之Android篇
[本文出自天外归云的博客园] 简介 以下用来做自动化测试的这款app叫最爱抓娃娃,以后会改名为网易抓娃娃. 下文提到的appiumier项目里会包含用来测试的apk包以及自动化测试代码. 先说一个坑 ...
- Windows下Python3.7的安装
1.下载Python3官网地址:www.python.org当前最新版本为Python 3.7.3. Windows下有个6个下载链接Windows x86-64 embeddable zip fil ...
- windows下python3.7安装gmpy2、Crypto 库及rsa
基于python3.7在windows下安装gmpy2 先检查一下是否安装了wheel文件包,在cmd中输入wheel,查看一下,如果没有安装,则输入安装:pip install wheel 如果遇到 ...
- [No000054] Windows 下Python3.5, NoteBook增强版安装
接着上周继续,没看的童鞋.请移步: http://www.cnblogs.com/Chary/p/No00004B.html 这里,假设你已经能够看到这个画面了: 接下来,我们继续 给药 : 安装no ...
- windows 下的tcping 小插件
如果把插件放在根目录 就要能过cmd切换到根目录 cd \ c:\>tcping -d -t -i 0.06 www.baidu.com 将文件放在c:\WINDOWS\system32目录下, ...
随机推荐
- xcode5.1生成framework,支持arm64报错
错误例如以下: ld: Assertion failed: (_machoSection != 0), function machoSection, file /SourceCache/ld64/ld ...
- 【Android】Android程序自己主动更新
App自己主动更新的步骤可分为三步: 检查更新(假设有更新进行第2步,否则返回) 下载新版的APK安装包 安装APK 以下对这三步进行解释.当中会穿插相应代码.App自己主动更新的这三步所有被封装到了 ...
- 多项福利回馈会员,且看Hao123怎样玩转“霸权主义”
谈到"霸权主义",我们非常easy将其与国际政治联系在一起.只是.霸权主义可不全然用来形容政治,在7月14日,Hao123上线了一个会员福利活动,命名为"Hao1 ...
- DNS Tunnel判定方法
DNS Tunnel判定方法: 1.查询DNS请求的域名是否存在备案: 2.查询DNS请求的域名情报信息(以及域名的alex排名): 3.查看相同主域名下子域名编码格式及长度:(存在Base32和Ba ...
- Swift学习笔记(9):枚举
目录: 基本语法 关联值 原始值 枚举为一组相关的值定义了一个共同的类型. ・可以给枚举成员指定原始值类型:字符串,字符,整型值或浮点数等 ・枚举成员可以指定任意类型的关联值存储到枚举成员中 ・枚举可 ...
- React-Router-API中文介绍
React-Router API 以下内容翻译自react-router/doc/API.md,方便使用时查看,之前的学习都是能够工作即可,但一些内在发生的行为并不知晓,借此理解一番: ##Compo ...
- Site Isolation Design Document
This design document covers technical information about how Site Isolation is built. For a general ...
- laravel 5.5 项目报错
报错内容: ErrorException (E_WARNING) Declaration of App\Observers\SiteObserver::updated($site) should be ...
- String值传递剖析
转载自 http://www.iteye.com/topic/412531 提要:本文从实现原理的角度上阐述和剖析了:在Java语言中,以String作为类型的变量在作为方法参数时所表现出的“非对象” ...
- (五)Redux入门
1 Redux概念简述 flux推出的时候有一些缺点.比如store可以存在多个,不是特别好用 于是逐渐进化为了redux. 2 Redux的工作流程 拿借书作举例: action creators是 ...