首页 > 编程语言 >Python 图片管理工具介绍(筛像素+从文件夹取出图片并放到文件夹内+excel读取)

Python 图片管理工具介绍(筛像素+从文件夹取出图片并放到文件夹内+excel读取)

时间:2023-10-07 19:25:49浏览次数:48  
标签:src Python filename 文件夹 path os dir 图片

功能介绍:

这是一个Python脚本工具,用于批量管理和复制图片。其主要功能如下:

  1. 从Excel表格读取数据:程序使用openpyxl库从Excel文件中读取数据,其中A列包含源图片的路径(可以有多个路径,用逗号分隔),B列包含目标目录。

  2. 图片筛选:仅复制最小维度大于800像素的图片,这可以确保目标目录中的图片具有一定的质量。

  3. 智能重命名:在复制过程中,图片会根据其所在的上一级文件夹名称进行重命名,以避免名称冲突。如果目标目录中存在同名文件,程序会自动重命名为“filename(1).jpg/png”、“filename(2).jpg/png”等。

  4. 进度汇报:程序在复制图片时会在控制台显示当前的复制进度。

完成的事情:

  • 程序会遍历Excel表中的所有行,并对每一行执行复制操作。

  • 每次复制操作,程序都会检查源目录下的所有.jpg.png文件,筛选出最小维度大于800像素的图片,并将其复制到目标目录。

  • 在复制过程中,所有图片都会根据其上一级文件夹的名称进行重命名。

使用注意事项:

  1. Excel文件格式:确保提供的Excel文件为.xlsx或.xlsm格式。

  2. 文件路径:在Excel文件中列出的路径不应包含额外的引号。程序已配置为处理这些情况,但为了保持数据的整洁和准确,请避免这样做。

  3. 文件访问权限:确保脚本具有读取源目录和写入目标目录的权限。

  4. 文件完整性:确保要复制的图片没有损坏并且可以正常打开。

  5. 所需库:在使用此工具之前,确保已安装openpyxlPillow库。你可以使用pip install openpyxl Pillow命令进行安装。

附件的格式:

附带的Excel文件应该有以下格式:

  • A列:源图片路径。可以是多个路径,使用逗号,分隔。

  • B列:目标目录,即图片复制的位置。


  • import os
    import shutil
    from openpyxl import load_workbook
    from PIL import Image, UnidentifiedImageError

    def is_large_enough(image_path):
    """检查图片的最小维度是否大于800像素"""
    try:
    with Image.open(image_path) as img:
    width, height = img.size
    return min(width, height) > 800
    except (UnidentifiedImageError, IOError) as e:
    print(f"警告: 无法处理图像 {image_path} - {e}")
    return False

    def copy_images(src_dirs, dst_dir):
    total_files = 0
    copied_files = 0

    for src_dir in src_dirs:
    src_dir = src_dir.strip().strip('"')

    try:
    # 计算总的文件数量,用于进度报告
    for _, _, filenames in os.walk(src_dir):
    total_files += sum(1 for filename in filenames if filename.endswith(('.png', '.jpg')))

    for foldername, subfolders, filenames in os.walk(src_dir):
    for filename in filenames:
    if filename.endswith('.png') or filename.endswith('.jpg'):
    src_path = os.path.join(foldername, filename)

    if is_large_enough(src_path):
    # 使用上一级文件夹名称重命名图片
    parent_folder_name = os.path.basename(foldername)
    new_name = parent_folder_name + os.path.splitext(filename)[1]
    dst_path = os.path.join(dst_dir, new_name)

    # 如果目标路径存在同名文件,改变文件名避免覆盖
    counter = 1
    while os.path.exists(dst_path):
    name, ext = os.path.splitext(new_name)
    dst_path = os.path.join(dst_dir, f"{name}({counter}){ext}")
    counter += 1

    shutil.copy2(src_path, dst_path)
    copied_files += 1

    # 输出进度
    print(f"进度: {copied_files}/{total_files} 已复制")
    except Exception as e:
    print(f"警告: 无法复制从 {src_dir} 到 {dst_dir} - {e}")

    def main():
    try:
    excel_path = input("请输入Excel表地址: ").strip('"')

    # 加载excel文件
    wb = load_workbook(excel_path)
    sheet = wb.active

    # 遍历每行数据
    for row in sheet.iter_rows(min_row=1, values_only=True):
    source_dirs = [x.strip('"') for x in row[0].split(",")]
    target_dir = row[1].strip('"')
    copy_images(source_dirs, target_dir)

    print("图片复制完成!")
    except Exception as e:
    print(f"发生错误: {e}")

    if __name__ == '__main__':
    main()

标签:src,Python,filename,文件夹,path,os,dir,图片
From: https://www.cnblogs.com/zly324/p/17747245.html

相关文章

  • Python3.12 新特性——GIL 重大突破!
    Python3.12新特性2023年10月2日,Python3.12正式发布了,和之前版本相比,Python3.12有比较大的更新,核心最主要的就是能够支持解释器之间的隔离了,在一个Python进程当中能够有多个解释器,这在一定程度上缓解了GIL带来的问题,在这个版本当中主要有下面的一些主要的新特性:更灵......
  • Python标准库分享之文件管理 (部分os包,shutil包)
    在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令。Python标准库则允许我们从Python内部管理文件。相同的目的,我们有了两条途径。尽管在Python调用标准库的方式不如操作系统命令直接,但有它自己的优势。你可以利用Python语言,并发挥其他Python工具,形成组......
  • 【接口自动化】安装环境-python
    1.下载Python访问Python官网: www.python.org/点击downloads按钮,在下拉框中选择系统类型(windows/MacOS/Linux等)选择下载最新版本的Python没有版本要求的话,尽量使用最新版本前几个版本。避免新版本的不稳定 2. 安装Python双击下载好的Python安装包勾选左下角Add......
  • python的装饰器
    python的装饰器1、装饰器的定义给已有的函数添加额外功能的函数,它本质上就是一个闭包函数。装饰器的功能特点:不修改已有函数的功能特点不修改已有函数的调用方式给已有函数添加额外的功能需求:给comment函数添加一个额外功能(需要先登陆,再评论)要求:不能改变现有comment函数......
  • python日志logger
    写代码过程中,为了方便问题定位,经常需要打印信息,但是太多的print()不好,所以可以用到loggerLogger通常分为两类:一类是StreamHandler,将日志信息输出到控制台;另一类是FileHandler,将日志信息输出到文件。Python标准库中的logging模块提供了强大的Logger功能。importloggingcla......
  • python+playwright 元素操作
    Playwright可以与HTML输入元素交互,例如文本输入、复选框、单选按钮、选择选项、鼠标单击、键入字符、键和快捷方式以及上传文件和焦点元素。fill()输入文字使用 locator.fill() 是填写表单字段的最简单方法。它聚焦元素并input使用输入的文本触发事件。它适用于<input>,<t......
  • Swiper横向循环焦点图片展示
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><title>Swiper的切换</title><linkrel="stylesheet"href="css/swiper.min.css"><linkrel="styleshe......
  • Python笔记目录
    Python笔记目录本视频学习自b站python视频,原地址在此笔记在原版笔记的基础上根据自己的理解做了调整,与原版的顺序和内容有有些区别笔记仅供学习使用,侵删第一章Python的安装、卸载第二章PyCharm的下载、安装、使用第三章Python的编写和运行第四章Python的基础语法......
  • python+playwright 元素定位
    元素定位官方文档:https://playwright.dev/python/docs/locators#lists元素操作官方文档:https://playwright.dev/python/docs/next/api/class-locator#methods1、xpath定位打开百度网页,点击导航-新闻#xpah//*[@id="s-top-left"]/a[1]page.click('xpath=//*[@id="s-top-......
  • python 3.12.0 perf 试用
    python3.12.0的发布,官方支持了基于perf的调用链分析,基于容器搞了一个简单的环境测试下环境准备包含了包含perf的python基础镜像,以及一个使用flask的web服务,使用flamescope的可视化页面分析docker-compose文件version:'3'services:flamescope:......