Python获取Excel内容

avatar
作者
筋斗云
阅读量:0

Python获取Excel内容

目录

需求:获取xlsx files目录下的所有Excel信息,并将数据打包成字典格式上传到接口

示例数据:

image-20240806135036076

1.读取Excel并登陆

import os import re import glob import pandas as pd from PIL import Image import requests from openpyxl import load_workbook  # 获取当前路径 current_path = os.getcwd()  # 定义目标文件夹和子目录 如果不存在则新建 dir_path = current_path + '\\xlsx files' images_dir = current_path + '\\images' target_files = glob.glob(os.path.join(dir_path, '*.xlsx')) os.makedirs(dir_path, exist_ok=True) os.makedirs(images_dir, exist_ok=True) print(target_files)  # 定义登陆url和接口url login_url = 'http://127.0.0.1:8000/core/login/' api_url = 'http://127.0.0.1:8000/revice_product/' u_p = {'username': '123', 'password': '123'} res = requests.post(url=login_url, data=u_p) token = res.headers.get('Set-Cookie') cookies = {f'{token.split('=')[0]}': f'{token.split('=', 1)[1]}'} 

2.下载Excel中图片 数据存储到列表

# 存放图片名称信息 files_name = [] # 遍历目录下的所有Excel文件 for i in target_files:     df = pd.read_excel(i) # 读取Excel信息 存放到df     wb = load_workbook(i) # 读取Excel函数 用于图片处理     ws = wb[wb.sheetnames[0]] # 切换到第一个sheet表          # 遍历获取表中所有图片     for image in ws._images:         image_row = image.anchor._from.row # 图片所在行         image_col = image.anchor._from.col # 图片所在列         # 根据图片位置获取其它信息 比如这里是产品名         df_name = df.iloc[image_row, image_col - 6]                  # 打开图片并存储         img = Image.open(image.ref).convert("RGB") 		# 以产品名命名图片 并存入列表         img.save(os.path.join(images_dir, f'{df_name}.png'))         files_name.append(df_name)         df = pd.read_excel(i)             db = pd.read_excel(i) # 读取Excel其它的信息 存放到db     # 遍历Excel每一行数据     for index, j in df.iterrows():         row_dict = {}         # 遍历每一列数据         for col in df.columns:             # 排除空数据和第一列数据 因为第一行一般没有数据             if not pd.isna(j[col]) and col != 'Unnamed: 0':                 # 案例中的列名是 姓名(name)格式的 这里作者只取括号内的内容                 col_name = re.search(r'\(([^)]*)\)', col).group(1)                 # 下面就是对数据进行处理                 if col_name == 'needle_type':                     j[col] = re.search(r'\d+', j[col]).group(0) + 'G'                 if col_name == 'gram_weight':                     j[col] = re.search(r'\d+', str(j[col])).group(0)                 # 以列名作为键 内容作为值存储在row_dict字典                 row_dict[col_name] = j[col]  # {'name': '张三'}         # 每读取好一行就将字典保存到列表         data_list.append(row_dict) print(files_name) print(data_list) 

3.上传到接口

# 遍历所有经过处理的数据 for i in data_list:     # 根据已存图片 获取其对应的数据     if i['name'] in files_name:         with open(os.path.join(images_dir, i['name'] + '.png'), 'rb') as f:             # 读取该图片 修改为符合form-data格式的键值对             files = {'image': (i['name'] + '.png', f, 'image/png')}             # 生成字典数据 不包括图片信息             data = {k: v for k, v in i.items() if k != 'product_image'}             # 通过post请求发送数据data和图片files到指定url             res = requests.post(url=api_url, cookies=cookies, data=data, files=files) 

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!