最近在弄华为云上传图片后把地址写到Excel表格的时候遇到一些问题,问题的解决思路在这里给捋一下。

别问为什么当时写爬虫的时候为什么不直接把网址给写下来,因为闲的慌🤡。

案例1
1,给一个Excel表格,如下:
在这里插入图片描述
2,给一些图片:
在这里插入图片描述
3,通过观察Excel表格和图片,可以观察出食谱名称和图片名称唯一的差别就是 “.jpg”

4,解决思路:

'''
这里直接读取Excel表格的表头名称,
然后用OS库读取图片名称,然后进行判断对比
'''
# 读取Excel表
read = pd.read_excel('./data/食谱库.xlsx',sheet_name='果蔬榨汁')
# 读取图片名称
file_list = os.listdir('./果蔬榨汁')
# 遍历表头  写个嵌套循环就OK了
for i in range(len(read)):
    title = read["食谱名称"][i]
    up_temp = []
    for x in file_list:
        if x == title + '.jpg':
            up_temp.append(x)

5,如何连接华为云和创建桶可以看官方文档,完整代码:

import pandas as pd
import csv
import json
import xlrd
import os
import re
import requests
import uuid

from xlwt import *
# 引入模块
from obs import ObsClient    #用于连接华为云OBS的库

# 读取Excel表
read = pd.read_excel('./data/食谱库.xlsx',sheet_name='果蔬榨汁')
# 读取图片名称
file_list = os.listdir('./果蔬榨汁')
# 遍历表头  写个嵌套循环就OK了

obsClient = ObsClient(
    access_key_id='',  # 你的华为云的ak码
    secret_access_key='',  # 你的华为云的sk
    server=''  #你的桶的地址
)

for i in range(len(read)):
    title = read["食谱名称"][i]
    up_temp = []
    for x in file_list:
        if x == title + '.jpg':
            up_temp.append(x)
    if up_temp:
        urllist = []
        for imgpath in up_temp:
            content = open('./果蔬榨汁/'+str(imgpath), 'rb')
            # obsClient.putContent参数解析('你的桶名','对象名','上传的内容')
            resp = obsClient.putContent('', imgpath, content=content)
            # 获取上传的URL
            res = resp.body.objectUrl
            urllist.append(res)
        # 利用json.dumps 对网址进行编码,防止显示错误
        print(json.dumps(urllist))
        read.loc[i,"食谱图片"] = json.dumps(urllist)
# 直接利用pandas的to_excel写入表格
read.to_excel('./食谱库.xlsx')

结果展示(这里存储的格式我用了列表,有小伙伴觉得不太行可以自己改一下):
在这里插入图片描述

看吧,很简单是不是有手就行,但是标题的正则表达式匹配呢?

我们来看第二个案例:
1,一样的Excel
在这里插入图片描述
2,但是!!!! 仔细观察你会发现图片和穴位编号不一样,穴位编号只有BL1之后的文字就没有了,而且它还有三张图片。
在这里插入图片描述
3,啊这。。。。。就用到正则表达式了,也是很简单

'''
我们这里用到的是 
re.search  扫描整个字符串并返回第一个成功的匹配
思路一下子就有了是不是
'''
# 我们这里规定一个中文编码范围,用来匹配的
mo = r'[\u4e00-\u9fa5]'

read = pd.read_excel('./data/经络穴位-V3.xlsx')
file_list = os.listdir('./img')

# 老方法 嵌套循环
for i in range(len(read)):
    title = read["穴位编号"][i]
    up_temp = []
    for x in file_list:
        #正则表达式匹配
        index = re.search(mo, x).start()
        no = x[0:index]
        print(no)
        if title == no:
            up_temp.append(x)

然后这里的上传华为云的代码和上边的一样,只需要把连接华为的代码复制下来就可以了。

4,结果展示
在这里插入图片描述
可以看到列表里边有三个网址,证明代码对了。nice!

最后呢打个广告,这是我朋友录制的一个uniapp的教材,绝对良心教程,大家可以去B站支持一下

射射大家!
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐