python操作excel报表

一、python处理excel报表:

python怎样读写excel表呢。python是我见过处理excel报表最快速简单的语言,没有之一。
pip install xlrd——>读excel
pip install xlwt——写excel

1、读取excel:读excel基本是定死了的,但反过来写入数据到excel表要多样化一点,因为涉及到数据的存储位置,可能是文件亦可能是数据库。

# -*- coding: utf8 -*-
# @Author   : lan_yue_chuan
# @time     : 2020/5/29 21:48
# @File     : 读取excel.py

import xlrd
def read_excel(excel_path,sheet_name,data_path='读取的表格数据',int_flag=0):
    """
    :param excel_path:  # 必须填你的表格路径
    :param sheet_name:  # 必须填读取这个表格的哪个sheet
    :param data_path:  # 选填
    :param int_flag:  # 针对数字是否要保留小数,默认要保留,传入1代表只要整型
    :return:  # 无返回值,直接生成读取的数据到一个txt文件
    """
    # 一个workbook就是一个excel文件
    workbook = xlrd.open_workbook(excel_path,) 

    # 找到要读取的sheet
    sheet = workbook.sheet_by_name(sheet_name)

    # 从表格里读取表头(表头在第0行)
    title_row = sheet.row(0)
    base_title = [name.value for name in title_row]

    lis = list()  # 最终把所有字典往这里边塞
    for i in range(1,sheet.nrows):
        data_row = sheet.row(i)
        dic = {}  # 用来装每行数据的字典
        for j in range(sheet.ncols):
            cell = data_row[j]   # cell是每一个单元格
            # 如果是时间要单独处理 print(cell.value)
            value = cell.value
            if cell.ctype == xlrd.XL_CELL_DATE:
                # 如果是日期类型必须转化,django上传文件的时候upload_to字段'%Y/%m/%d'内部就是执行的strftime
                value = xlrd.xldate_as_datetime(cell.value,0).strftime("%Y-%m-%d")
            if int_flag == 1:
                if cell.ctype == xlrd.XL_CELL_NUMBER:
                    value = int(value)
            dic[base_title[j]] = value
        lis.append(dic)
    # 把所有字典(这个列表)持久化存储到文件
    with open('{}.txt'.format(data_path),'w',encoding='utf8')as f:
        f.write(str(lis))

if __name__ == "__main__":
    read_excel(r'C:\Users\lan_yc\Desktop\文件处理\python处理excel\爆款数据.xlsx','Sheet1',int_flag=1)

2、写入excel:文件必须是这样的文件[{"id":1,"name":"买了佛冷"},[{"id":2,"name":"why"}],列表中套一个一个字典,每个字典代表一条用户数据,要手动构造很难,这种数据一看就是爬虫爬下来然后把多个字典塞进一个列表。

# -*- coding: utf8 -*-
# @Author   : lan_yue_chuan
# @time     : 2020/5/29 22:22
# @File     : 写入excel.py


import xlwt

def write_excel(data_path,sheet_name='sheet1',excel_name="新生成的表格数据"):
    """
    :param data_path:  # 带导入数据的文件路径,必须存的这种形式:[{"id":1,"name":"买了佛冷"},.......]
    :param excel_name:   # 这个表格名称
    :param sheet_name:   # 这个表格的sheet名称   默认为sheet1
    :return:  # 无返回值,直接生成表格   默认为"新生成的表格数据.xlsx"
    """
    # 创建一个空表
    workbook = xlwt.Workbook()

    sheet = workbook.add_sheet(sheet_name)

    """当你字符串里套的是字典或列表,正面硬取你是取不到的。字符串是不可变,且你取出来也是字符串,eval函数一定要记住,很有用,"""
    # 这是准备写入的数据,可以是数据库的,可以是文件的,很少是写死的
    lis_str = open(data_path,encoding='utf8').read()
    lis = eval(lis_str)

    # 先写入表头(第0行第x列,记住无论行列都是按0开始,相当于都存在是列表)
    i = 0
    for key in lis[0]:
        sheet.write(0,i,key)
        i += 1


    for i in range(len(lis)):
        dic = lis[i]
        value_lis = list(dic.values())
        for j in range(len(value_lis)):
            sheet.write(i + 1, j, value_lis[j])

    workbook.save("{}.xlsx".format(excel_name))


if __name__ == "__main__":
    write_excel(r'C:\Users\lan_yc\Desktop\文件处理\python处理excel\表格数据.txt')

注意:本例我是把文件中的数据写入,其实还有一种mongodb跟这个数据结构很契合。我们可以把爬虫爬到的数据轻松导入到excel表。

# -*- coding: utf8 -*-
# @Author   : lan_yue_chuan
# @time     : 2020/5/30 0:14
# @File     : 写入mongodb的数据进excel.py

import xlwt
from pymongo import MongoClient

client = MongoClient(host='ip',port='d端口')  # 实例化client,建立连接,我是docker跑的mongodb

collection = client['video']['lan']  # 选择数据库及里面的集合

data_cursor = collection.find()

def write_mongo_excel(sheet_name='sheet1',excel_name="新生成mongo的表格数据"):
    """
    :param excel_name:   # 这个表格名称
    :param sheet_name:   # 这个表格的sheet名称   默认为sheet1
    :return:  # 无返回值,直接生成表格   默认为"新生成的表格数据.xlsx"
    """
    # 创建一个空表
    workbook = xlwt.Workbook()

    sheet = workbook.add_sheet(sheet_name)


    lis = []
    for dic in data_cursor[:10]:
        # 先把mongo集合中的_id去掉,再去掉一个用户头像url和详情地址
        del dic["_id"]
        del dic["user_image_url"]
        del dic["video_detail"]
        lis.append(dic)

    # 先写入表头(第0行第x列,记住无论行列都是按0开始,相当于都存在是列表)
    i = 0
    for key in lis[0]:
        sheet.write(0,i,key)
        i += 1


    for i in range(len(lis)):
        dic = lis[i]
        value_lis = list(dic.values())
        for j in range(len(value_lis)):
            sheet.write(i + 1, j, value_lis[j])

    workbook.save("{}.xlsx".format(excel_name))

if __name__ == "__main__":
    write_mongo_excel()

导入文件和导入mongodb数据的代码都差不多一样,只不过lis列表那里变了一点,前者是在文件中读,后者是在数据库中读,所以说其实爬虫爬下来的数据很好做导入excel的操作,以后基本也是用这种模式。

二、说一下pip安装报错:

1、临时修改pip镜像源使用国内清华pip镜像

pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple

永久修改(建议)pip镜像(需要把pip升级到10.0.0以上):

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

2、终极办法
进这个网站https://www.lfd.uci.edu/~gohlke/pythonlibs/,下载whl文件,再pip install xxxx.whl,专门用来解决难安装的包。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值