一、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
,专门用来解决难安装的包。