Python获取Excel内容

Python获取Excel内容

目录

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

示例数据:

1.读取Excel并登陆

python 复制代码
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中图片 数据存储到列表

python 复制代码
# 存放图片名称信息
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.上传到接口

python 复制代码
# 遍历所有经过处理的数据
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)
相关推荐
工业互联网专业10 分钟前
Python毕业设计选题:基于python的酒店推荐系统_django+hadoop
hadoop·python·django·vue·毕业设计·源码·课程设计
任小永的博客16 分钟前
VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)
后端·python·django
凡人的AI工具箱18 分钟前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
余生H22 分钟前
前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
前端·python·django
凡人的AI工具箱28 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
小军军军军军军32 分钟前
MLU运行Stable Diffusion WebUI Forge【flux】
人工智能·python·语言模型·stable diffusion
数据小小爬虫40 分钟前
Python爬虫获取AliExpress商品详情
开发语言·爬虫·python
小爬虫程序猿41 分钟前
利用Python爬虫速卖通按关键字搜索AliExpress商品
开发语言·爬虫·python
一朵好运莲1 小时前
React引入Echart水球图
开发语言·javascript·ecmascript
Eiceblue1 小时前
使用Python获取PDF文本和图片的精确位置
开发语言·python·pdf