Python执行批量导出简历

文章目录

当我们运行这段代码时,首先我们需要导入一些库和模块。

1. 导入库和模块

import os
import requests
import tkinter as tk
from tkinter import filedialog
import pandas as pd
from PIL import Image

接下来,我们定义了一个名为download_images的函数。这个函数的目的是下载图片,并且它接受两个参数:保存路径save_path和数据data

2. 定义下载图片的函数

def download_images(save_path, data):
    # 逐行处理数据
    for item in data:
        # 处理链接
        links = item.split('|') if '|' in item else [item]

        # 遍历链接
        for link in links:
            # 发送HTTP请求获取图片文件内容
            response = requests.get(link)

            # 检查响应状态码
            if response.status_code == 200:
                # 解析图片文件扩展名
                extension = link.split('.')[-1].lower()
                if extension not in ['jpg', 'jpeg', 'png', 'gif']:
                    extension = 'jpg'  # 设置默认扩展名为jpg

                # 提取姓名和求职意向信息
                name, intent = item.split(':')

                # 拆分求职意向为职位列表
                positions = intent.split(',')

                # 遍历职位列表
                for position in positions:
                    # 提取职位名称和地点信息
                    position_name, location = position.split('@')

                    # 确定保存路径
                    if os.path.isdir(save_path):
                        folder_path = os.path.join(save_path, f'{name}_{position_name}')
                        os.makedirs(folder_path, exist_ok=True)
                        file_path = os.path.join(folder_path, f'{name}_{position_name}.{extension}')
                    else:
                        file_path = os.path.join(save_path, f'{name}_{position_name}.{extension}')

                    # 将图片文件写入磁盘
                    with open(file_path, 'wb') as file:
                        file.write(response.content)

                    # 验证图片文件有效性
                    try:
                        Image.open(file_path)
                    except (OSError, IOError):
                        os.remove(file_path)  # 删除无效的图片文件
                    else:
                        print(f'Downloaded image: {file_path}')

在整个函数的实现中,我们首先处理数据中的每个项目。如果项目中包含竖线|,这意味着有多个链接,我们需要将它们拆分开来。否则,我们将链接存储在一个列表中。

接下来,我们使用requests库发送HTTP请求来获取图片文件的内容。我们对链接进行URL编码,以处理链接中的特殊字符。如果请求成功,我们会检查响应的状态码,以确保我们获取到了有效的图片文件。

然后,我们从链接中解析出图片文件的扩展名,并将其转换为小写。如果扩展名不在支持的图片格式列表中,我们会将其设置为默认的jpg格式。

在处理链接和图片格式之后,我们需要提取出姓名和求职意向的信息。求职意向可能包含多个职位和地点,我们会将它们拆分成一个职位列表,并进一步提取出每个职位的名称和地点信息。

确定了保存路径后,我们将图片文件的内容写入磁盘,并使用PIL库的Image.open函数验证图片文件的有效性。如果验证失败,说明图片文件损坏或无效,我们会将其删除并继续处理下一个链接。如果验证成功,我们会打印出下载完成的信息,包括图片文件的路径。

接下来,代码中定义了一个名为on_Import_button_click的函数。当用户点击”Upload Files”按钮时,这个函数会执行一系列操作,包括获取当前工作目录路径、创建保存图片文件的文件夹、打开文件选择对话框、读取选择的Excel文件等。

3. 处理”Upload Files”按钮点击事件

def on_Import_button_click():
    # 获取当前工作目录路径
    current_dir = os当前工作目录路径获取与文件夹创建的代码如下:

```python
def on_Import_button_click():
    # 获取当前工作目录路径
    current_dir = os.getcwd()

    # 创建保存图片文件的文件夹
    save_folder = os.path.join(current_dir, 'images')
    os.makedirs(save_folder, exist_ok=True)

    # 打开文件选择对话框
    filetypes = [('Excel Files', '*.xlsx;*.xls')]
    file_path = filedialog.askopenfilename(filetypes=filetypes)

    if file_path:
        # 读取选择的Excel文件
        data = pd.read_excel(file_path)

        # 下载图片
        download_images(save_folder, data)
    else:
        print('No file selected.')

在这个函数中,我们首先使用os.getcwd()函数获取当前工作目录的路径。然后,我们使用os.makedirs()函数创建一个名为images的文件夹,用于保存图片文件。设置exist_ok=True参数可以确保如果文件夹已经存在,就不会引发错误。

接下来,我们使用filedialog.askopenfilename()函数打开一个文件选择对话框,让用户选择要导入的Excel文件。我们设置了文件类型为Excel文件(扩展名为.xlsx.xls)。

如果用户选择了一个有效的文件,我们使用pd.read_excel()函数读取Excel文件的内容,并将其存储在变量data中。

最后,我们调用download_images()函数,传入保存图片文件的文件夹路径和Excel数据。这将触发下载图片的过程。

如果用户没有选择任何文件,我们会打印出”No file selected.”的信息。这个函数的其他部分可以根据实际需求进行补充和修改。

4.完整代码

import os
import requests
import tkinter as tk
import pandas as pd
from tkinter import scrolledtext
from tkinter import filedialog
from PIL import Image
from io import BytesIO
from urllib.parse import quote
from requests.exceptions import RequestException
from urllib.parse import unquote

Image_First_Name = ""
Image_Last_Name = ""


def download_images(save_path, data):

    for i, link_text in enumerate(data['个人简历']):
        if '|' in link_text:
            # 多个链接,进行拆分
            links = link_text.split('|')
            mk_sub_folder = True
        else:
            # 单个链接
            links = [unquote(link_text.strip())] 
            mk_sub_folder = False
        print(links)
        for j, link in enumerate(links):
            try:
                encoded_link = quote(link, safe=":/")
                response = requests.get(encoded_link, verify=False)  # 禁用 SSL 证书验证
                response.raise_for_status()

                # 获取文件扩展名
                extension = link.split('.')[-1].lower()
                if extension not in ['jpg', 'jpeg', 'png', 'gif']:
                    extension = 'jpg'
                    
                Image_First_Name = data['姓名'][i]
                Jobs_positions_list = data['求职意向'][i]
                
                positions = Jobs_positions_list.split(',')
                for position in positions:
                    # 使用短横线分割职位名称和地点
                    parts = position.split('-')
                    
                    # 提取职位名称和地点(如果有的话)
                    job_title = parts[0].strip()
                    locations = parts[1].split('/') if len(parts) > 1 else []
                    print(locations)
                    
                
                if(mk_sub_folder  == False):
                    # 保存图片
                    image_path = os.path.join(save_path, f"{Image_First_Name}_{job_title}+{locations}.{extension}")
                    with open(image_path, "wb") as f:
                        f.write(response.content)
                        
                else:
                    save_sub_path = save_path + f"\{Image_First_Name}_{job_title}+{locations}"  # 修改保存路径
                    os.makedirs(save_sub_path, exist_ok=True)
                    # 保存图片
                    image_sub_path = os.path.join(save_sub_path, f"{Image_First_Name}_{job_title}_{j}.{extension}")
                    with open(image_sub_path, "wb") as f:
                        f.write(response.content)   
    
                # 检查是否为有效图片文件
                try:
                    Image.open(image_path)
                except Exception as e:
                    print(f"Error validating image {i + 1}: {repr(e)}")
                    outout_text_lists.insert(tk.INSERT, f"Error validating image {i + 1}: {repr(e)}\n")
                    outout_text_lists.update_idletasks()  # 更新界面
                    os.remove(image_path)  # 删除无效文件
                outout_text_lists.insert(tk.INSERT, f"Index {i + 1} Images_{j + 1} download completed \n")
                outout_text_lists.update_idletasks()  # 更新界面
            except Exception as e:
                print(f"Error downloading image {i + 1}: {repr(e)}")
                outout_text_lists.insert(tk.INSERT, f"Error downloading image {i + 1}: {repr(e)}\n")
                outout_text_lists.update_idletasks()  # 更新界面
            
    return

                
def on_Import_button_click():
    try:
        pwd_path = os.getcwd()
        save_path = pwd_path + "\images"  # 修改保存路径
        os.makedirs(save_path, exist_ok=True)
        
        file_path = filedialog.askopenfilename()
        # 文件路径+文件名格式校验 
        
        data = pd.read_excel(file_path,usecols=('姓名','求职意向','个人简历'))
        print(data)
        #打印获取到的数据行数到对话框
        raws= data.shape[0]
        if(raws > 0):
            outout_text_lists.insert(tk.INSERT, "共获取到"+ str(raws) +"行简历数据 \n")
            outout_text_lists.update_idletasks()  # 更新界面
            download_images(save_path, data)
            
            
    except Exception as e:
         result_label.config(text=f"Error: {str(e)}")
    
    return
    

# 创建主窗口
window = tk.Tk()
window.title("Image Downloader")

# 创建导入 Excel 文件按钮
Import_button = tk.Button(window, text="Upload Files", command=on_Import_button_click, height=1, width=65)
Import_button.grid(row=0, column=0,  padx=20, pady=15)

# 创建输出框
outout_label = tk.Label(window, text="Exec Output:")
outout_label.grid(row=1, column=0, padx=10, pady=10, sticky="w")

outout_text_lists = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=200, height=150)
outout_text_lists.grid(row=2, column=0, padx=10, pady=10)

# 创建结果标签
result_label = tk.Label(window, text="")
result_label.grid(row=3, column=0, padx=10, pady=10)

# 设置行和列的权重
window.grid_rowconfigure(2, weight=1)
window.grid_columnconfigure(0, weight=1)

# 运行主循环
window.mainloop()

总的来说,这段代码演示了如何导入库和模块、定义下载图片的函数,以及处理”Upload Files”按钮点击事件的函数。这些标题可以帮助我们更好地理解代码的结构和功能。

©️李联华的博客网 当前IP地址:3.144.254.237,归属地:俄亥俄州Dublin ,欢迎您的访问!

温馨提示 : 非特殊注明,否则均为李联华的博客原创文章,本站文章未经授权禁止任何形式转载
文章链接:https://www.ooize.com/batch-export-of-resumes-using-python.html
订阅
提醒
guest
0 评论
内联反馈
查看所有评论
Loading...