windows下python3 使用cx_Oracle,xlrd插件进行excel数据清洗录入

简介: 我们在做数据分析,清洗的过程中,很多时候会面对各种各样的数据源,要针对不同的数据源进行清洗,入库的工作。当然python这个语言,我比较喜欢,开发效率高,基本上怎么写都能运行,而且安装配置简单,基本上有网的环境pip install全部都搞定,没网的话,把whl包copy过来一行命令也就解决了( windows下python3.5使用pip离线安装whl包)。

我们在做数据分析,清洗的过程中,很多时候会面对各种各样的数据源,要针对不同的数据源进行清洗,入库的工作。当然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

相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
251 10
|
1月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
96 33
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
1月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
171 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3月前
|
数据采集 数据挖掘 数据格式
使用Python进行数据清洗的实用指南
在数据分析的世界里,"垃圾进,垃圾出"这句老话再贴切不过。数据清洗作为数据分析前的关键步骤,直接影响着分析结果的准确性与可靠性。本文将通过浅显易懂的语言和实际代码示例,带你掌握如何使用Python及其强大的库进行数据清洗,从缺失值处理到异常值检测,再到数据格式转换和重复数据删除,让你的数据准备工作变得既高效又专业。
147 2
|
4月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
246 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
2月前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
89 0
|
3月前
|
数据采集 机器学习/深度学习 数据挖掘
利用Python进行高效的数据清洗与预处理
在数据科学和机器学习项目中,数据清洗与预处理是至关重要的一步。本文将介绍如何使用Python中的Pandas库进行高效的数据清洗与预处理。我们将探讨如何处理缺失值、异常值、重复数据,以及如何进行数据类型转换和特征工程。此外,还将介绍一些实用的技巧来优化数据处理的性能。
|
4月前
|
Python
python读写操作excel日志
主要是读写操作,创建表格
80 2
|
4月前
|
数据采集 机器学习/深度学习 数据挖掘
利用Python进行数据清洗:技巧与实践
在数据科学和分析领域,数据清洗是一项基础且关键的任务。本文将带你了解数据清洗的重要性,并深入探讨使用Python进行数据清洗的多种技巧。我们将通过Pandas库来展示如何处理缺失数据、异常值、重复数据以及数据类型转换等常见问题。文章将提供实用的代码示例和最佳实践,帮助你高效地清洗数据,为数据分析和机器学习项目打下坚实的基础。

热门文章

最新文章