目录
背景
数据格式
处理步骤
1.使用xlrd读取excel表格数据
2.详细代码
①引入相关库
②实例代码
背景
导出数据到excel,数据中有图片,需求是批量下载图片的指定文件夹
数据格式
数据类型有直接是文本,也有显示图片,存在多张图片的情况,需要做的是批量获取Json格式数据中的pic,并进行下载
处理步骤
1.使用xlrd读取excel表格数据
pip install xlrd
注:高版本的xlrd目前去除了xlsx格式的支持,支持xls格式
目前使用有两种方式
1.删除高版本,重装xlrd
xlrd.biffh.XLRDError: Excel xlsx file; not supportedpip install xlrd==1.2.0
2.打开xlsx文件,另存为xls格式
2.详细代码
①引入相关库
import xlrd
import requests
import json
②实例代码
# 读取excel
read_path = r"xx\xx.xls" # excel文件路径
bk = xlrd.open_workbook(read_path)# 获取所有sheet,取第1个sheet页,如果有多个sheet也可以使用sheet_by_name()方法
try:sh = bk.sheets()[0]
except:print("no sheet in %s" % read_path)# 获取表中的总行数
nrows = sh.nrows
print("nrows:", nrows)# 由于数据存在文本和json格式数据,需要先进行判断
# 判断是否是json格式数据
def is_json(msg):if isinstance(msg, str): # 判断是否是字符串try:json.loads(msg)except ValueError:return Falsereturn Trueelse:return False# 表中第一行有标题,需要从第2行开始
for i in range(1, nrows):# print("下载第 %d 个图片" % i)picList = [] # 定义存放图片的list# 读取C列数据C_name = sh.cell_value(i, 2)print('C_name: ', C_name)# 读取D列数据 excel表中存在一行有多个图片情况,使用“;”对数据进行分隔,分别拿到每一个json格式数据D_name = sh.cell_value(i, 3).split(";")print('D_name: ', D_name)# 循环获取所有的jsonfor d_value in D_name:print('d_value:', d_value)if is_json(d_value):# 先对json进行判断picList = json.loads(d_value)['pic'] # 如果是json数据就直接取pic里的值if len(picList): # 为空不打印print("picList:", picList)# 循环取出图片地址 使用enumerate获取每个图片下标for j, picUrl in enumerate(picList):# 根据URL下载到本地f = requests.get(picUrl)# 需要先创建文件夹pic_name = r"D:\xxx\Downloads\文件夹\\" + C_name + "_" + str(j + 1) + ".png" # 构造完整文件路径+名称with open(pic_name, "wb") as code:code.write(f.content)