Python 读写excel Part1

醉酒当歌 提交于 2020-08-07 15:02:04

 

背景

有很多朋友对Python处理excel很感兴趣,虽然我不是这方面的专家,如果用C# openxl 是分分钟搞定的事情,再次点用Npoi也行,Python则完全陌生。

 

目标

既然以学习为目标去完成这件事,那么就不必太复杂(复杂我也做不来),就假设我们是在做销售系统吧。如果不专业请轻喷。

一份Excel的产品单,一份客户单,一份订单,字段简单点。

从头开始生成

 

一,工具

既然使用Python,当然要介绍一下工具库:

主要有openpyxl、xlwt、xlrd、Pandas(这是真的可以)、xlsxwriter

先来分析对比一波

 

1、Openpyxl

优势:快速、高效地读写Excel,可控制大部分Excel元素,并且写入时可以贴入公式

劣势:对初学者非常不友好,属性超级多,并且按xml格式控制;再来样式只能定义一次,修改样式就得先复制一份再重新构造,工作量几何级上升

 

2、xlsxwriter

专门用于写数据的方法

优势:快速,可控制大部分样式,公式只能以字符串处理,写数据以xy定位或单元格命名为主

劣势:没有毒没有毒没有毒,所以,千万别用同一份excel文档进行处理(我就吃了这个亏,好好几十万条记录被清洗一空),暂时不知道怎么追加到原文档后添加新sheet

 

3、xlrd、xlwt

可读写的excel库

优势:基本上用来读excel数据,非常精准、数据类型清晰

劣势:写明显很慢,10万条记录写了我10分钟(个人电脑,超级电脑可能会快点),而且不能操作样式?反正我没有找到对应的方法

 

综上初步研究,暂定xlrd 读文件,xlwt写新文档,准备好就开始

 

二、开始前准备

安装对应的库,怎样安装我就不在这里介绍了,可以私聊。

环境:python3.8,excel xlsx

 

pip install xlwt \ pip install xlrd \ pip install xlsxwriter

 

三、数据准备

接下来,我们需要模拟客户信息,为了方便管理处理,我们random,只制作简单的字段就行:ClientID、ClientName、Discount、Members、Industry

产品信息:ProID、ProName、Catalog、PurchasePrice、UnitPrice

这里不考虑进货存货问题,假设有勤劳的快递员不断补货

  

生成文件ClientCreator.py

# 随机生成客户信息

import random
import string
import CreateName
import xlsxwriter

# key 初始位置
ckbase = 10000


def CreateClients():
    clients =[]
    for i in range(100000):
        clients.append( CreateClient())

    return clients

# 生成单个客户


def CreateClient():
    # ClientID、ClientName、Discount、Members、Industry
    global ckbase
    ckbase += 1
    cid = 'ck' + str(ckbase)

    cname = CreateName.create_name2()

    dis = discountRandom(1, 10)

    mem = random.randint(1, 5)

    indu = IndustryCreate()

    client = [cid,cname,dis,mem, indu]
    return client


def p(text):
    print(text)

# discount 随机函数


def discountRandom(_min, _max):
    r1 = random.randint(0, 10)
    result = 0
    if(r1 > 6):
        result = random.randint(_min, _max)

    return result


def IndustryCreate():
    xlist = [
        '计算机','金融','教育','旅游','社交','电商']
    n = random.randint(0, len(xlist) - 1)
    rs = xlist[n]
    return rs

def write2excel(path,clients):
    # todo 创建excel文件
    xl = xlsxwriter.Workbook(path)
    
    # todo 添加sheet
    sheet = xl.add_worksheet('Client')

    #标题行  ClientID、ClientName、Discount、Members、Industry
    sheet.write_string(0,0,'ClientID')
    sheet.write_string(0,1,'ClientName')
    sheet.write_string(0,2,'Discount')
    sheet.write_string(0,3,'Members')
    sheet.write_string(0,4,'Industry')
    
    rowIndex = 0
    colIndex =0
    for row in clients:
        colIndex = 0
        for col in row :
            sheet.write_string(rowIndex+1,colIndex,str(col))
            colIndex += 1

        rowIndex += 1
    
    # todo 关闭文件
    xl.close()
    return "--  Done  --"


if __name__ == '__main__':
    cs = CreateClients()
    p(cs)
    write2excel(r'client1.xlsx',cs)

 

需要解释几点

  • CreateName 是独立的一个py文件,有需要小伙伴可以留邮箱
  • id是按顺序生成,discount、member 随机生成,行业暂定几个
  • xlsxwriter.Workbook(path) 是你保存的路径,自行修改

 接下来是产品,使用类似的脚本生成,我就不贴代码了

 

 

四、生成交易数据

前2份excel分别对应产品和客户,接下来我们模拟交易。

  • 任何客户可以任何东西(下一阶段我们再去限制购买种类)
  • 购买数量没有库存限制(下一阶段)
  • UnitPrice 是售卖单价,我们随机添加 商品discount,与客户discount叠加,也就是说 1 - 0.08 - 0.06 ,在扣减Purchase,得到利润 Profit(可以折上折,下一阶段)

开整 -------

转移到Part2

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!