首页 > 其他分享 >***批量修改文件夹名称

***批量修改文件夹名称

时间:2024-06-11 15:32:28浏览次数:21  
标签:批量 修改 文件夹 input path folder os col

1.统计文件夹结构下信息

import os
import openpyxl
from openpyxl import Workbook

# 询问用户输入文件夹路径
folder_path = input("请输入文件夹路径: ")

# 定义图片文件扩展名
image_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp']

def is_image_file(filename):
    return any(filename.lower().endswith(ext) for ext in image_extensions)

def cleanup_folder(folder):
    for root, dirs, files in os.walk(folder):
        for file in files:
            if not is_image_file(file) and not os.path.isdir(os.path.join(root, file)):
                os.remove(os.path.join(root, file))

def find_image_folders(folder):
    image_folders = []
    for root, dirs, files in os.walk(folder):
        if any(is_image_file(file) for file in files):
            image_folders.append(root)
    return image_folders

def create_excel(folder, image_folders):
    # 获取文件夹名称作为表格名称
    folder_name = os.path.basename(os.path.normpath(folder))
    excel_path = os.path.join(folder, f"{folder_name}.xlsx")

    # 创建Excel工作簿
    wb = Workbook()
    ws = wb.active
    ws.title = "Image Folders"

    # 将文件夹名称写入第一列和第二列
    for idx, image_folder in enumerate(image_folders, start=1):
        folder_name_only = os.path.basename(image_folder)
        ws.cell(row=idx, column=1, value=image_folder)
        ws.cell(row=idx, column=2, value=folder_name_only)

    # 保存Excel文件
    wb.save(excel_path)

def main():
    # 清理文件夹,删除非图片和非文件夹类文件
    cleanup_folder(folder_path)
    
    # 查找所有包含图片的文件夹
    image_folders = find_image_folders(folder_path)
    
    # 创建Excel表格并写入数据
    create_excel(folder_path, image_folders)

if __name__ == "__main__":
    main()

2.excel表格内部处理,只留中文(ctrl+shirft+enter)(b2)

=TEXTJOIN("", TRUE, IF(UNICODE(MID(B2, ROW(INDIRECT("1:" & LEN(B2))), 1)) >= 19968, MID(B2, ROW(INDIRECT("1:" & LEN(B2))), 1), ""))

3.复制数据到新表格(只有值),并操作以下代码。

import os
import shutil
import pandas as pd

def get_user_input():
    excel_path = input("请输入Excel表格路径: ")
    folder_path = input("请输入文件夹地址: ")
    input_col_index = int(input("请输入输入列号(从1开始): ")) - 1
    rename_col_index = int(input("请输入重命名列号(从1开始): ")) - 1
    return excel_path, folder_path, input_col_index, rename_col_index

def read_excel(excel_path, input_col_index, rename_col_index):
    try:
        df = pd.read_excel(excel_path)
        
        if df.empty:
            print("Excel文件为空,请检查文件内容。")
            return None, None
        
        print("读取到的Excel表格内容:")
        print(df.head())
        
        num_columns = len(df.columns)
        if input_col_index >= num_columns or rename_col_index >= num_columns:
            raise IndexError(f"列号超出范围,请检查输入的列号是否正确。表格有 {num_columns} 列。")
        
        input_col = df.iloc[:, input_col_index].astype(str).str.strip()
        rename_col = df.iloc[:, rename_col_index].astype(str).str.strip()
        
        return input_col, rename_col
    except FileNotFoundError:
        print(f"文件未找到: {excel_path}")
        return None, None
    except ValueError as e:
        print(f"读取Excel文件时发生值错误: {e}")
        return None, None
    except Exception as e:
        print(f"读取Excel表格时发生错误: {e}")
        return None, None

def delete_folder(path):
    try:
        shutil.rmtree(path)
        print(f"成功删除文件夹: {path}")
    except Exception as e:
        print(f"删除文件夹 {path} 时发生错误: {e}")

def process_folders(folder_path, input_col, rename_col):
    if not os.path.exists(folder_path):
        print(f"文件夹路径不存在: {folder_path}")
        return
    
    for root, dirs, _ in os.walk(folder_path, topdown=False):
        if not dirs:
            folder_name = os.path.basename(root)
            if folder_name in input_col.values:
                new_name = rename_col[input_col[input_col == folder_name].index[0]]
                new_folder_path = os.path.join(os.path.dirname(root), new_name)
                if new_name not in os.listdir(os.path.dirname(root)):
                    try:
                        os.rename(root, new_folder_path)
                        print(f"重命名文件夹 {root} 为 {new_folder_path}")
                    except Exception as e:
                        print(f"重命名文件夹 {root} 时发生错误: {e}")
                else:
                    print(f"文件夹 {new_folder_path} 已存在。删除新的文件夹 {root}.")
                    delete_folder(root)
            else:
                print(f"文件夹 {folder_name} 在输入列中未找到。删除文件夹 {root}.")
                delete_folder(root)

def main():
    excel_path, folder_path, input_col_index, rename_col_index = get_user_input()
    input_col, rename_col = read_excel(excel_path, input_col_index, rename_col_index)
    if input_col is not None and rename_col is not None:
        process_folders(folder_path, input_col, rename_col)
    else:
        print("处理停止。请检查输入并重试。")

if __name__ == "__main__":
    main()

 

标签:批量,修改,文件夹,input,path,folder,os,col
From: https://www.cnblogs.com/zly324/p/18242161

相关文章

  • git 教程:如何从github上拉取项目 · 进行修改并上传到自己仓库 · 一个仓库保存,多端同
    一:删除原始的远程仓库链接首先,查看当前的远程仓库链接:gitremote-v你会看到类似如下的输出:originhttps://github.com/othersusername/others-project.git(fetch)originhttps://github.com/othersusername/others-project.git(push)删除原始远程仓库链接:git......
  • WOS中批量导出文献后的文献信息统计查看
    1、WOS读取文献信息WOS要进行全信息的导出,需要先登录,选择WOS核心集,然后再进行检索。2、整理文献信息进Excel整理文献标题、年份、作者、关键词、摘要、期刊和被引用次数进excel表格。使用的数据格式为WOS中导出的全信息的plaintextfile。基于以下,后续可根据需求查找......
  • Xshell如何修改编辑文件 Xshell如何保存修改后的文件
    软件版本:Xshell7Xshell是一款功能强大的终端模拟软件,它可以让用户通过SSH、Telnet等协议远程连接到Linux服务器,并执行各种命令。在使用Xshell时,有时候我们需要修改服务器上的文件,或者保存我们的修改。那么,Xshell如何修改编辑文件,Xshell如何保存修改后的文件呢?本文将为你介绍这两......
  • zabbix-agent修改主动模式
    1.zabbix-agent工作模式zabbix-agent进程,有两种工作模式,主动模式,被动视频1.1被动模式被动模式是指zabbix-server将需要请求的数据,发给zabbix-agent,然后agent接收到请求后才进行对客户端机器数据采集,采集完毕后发给zabbix-server,交给zabbix-UI展示。但是这个过程是一次一......
  • 情景题之小明的Linux实习之旅:linux实战练习1(上)【基础命令,权限修改,日志查询,进程管理...
    小明的Linux实习之旅:基础指令练习情景练习题背景介绍场景1:初识Linux,创建目录和文件场景2:权限管理,小明的权限困惑场景3:打包与解压,小明的备份操作场景4:使用Grep,小明的搜索技能场景5:系统服务管理,小明的首次接触场景6:进程管理,小明的多任务处理场景7:定时任务与系统状态场景8:d......
  • Windows中的特殊文件夹
    shell:startup和shell:commonstartup开机启动项文件夹功能:添加到此文件夹的快捷方式会在Windows启动时自动打开。shell:startup针对当前用户,shell:commonstartup针对所有用户。注意:1.没有办法执行管理员身份的程序。2.startup准确来说是用户登录后启动。shell:......
  • 嵌入式Linux系统编程 — 3.5 utime、utimes、futimens、utimensat函数修改文件时间属
    目录1文件的时间属性简介2utime()函数2.1 utime()函数简介2.2示例程序3 utimes()函数3.1 utimes()函数简介3.2示例程序 4  futimens()函数4.1 futimens()函数简介4.2示例程序5 utimensat()函数5.1 utimensat()函数简介5.2 示例程序1文件的时间......
  • 【转载】GDB高级技巧:边Debug边修复BUG,无需修改代码,无需重新编译
    调试是每个程序员都逃不过的宿命!程序调试是一件非常考验耐心的事情,因为调试过程中经常会需要反复的修改源码,重新编译、重新部署、重新运行,这个过程通常是非常枯燥和繁琐的。尤其对于大型项目,光是编译可能需要几十分钟,甚至几个小时,部署过程则可能更为复杂漫长!那么,有没有一种更高......
  • 【YOLOv5进阶】——修改网络结构(以C2f模块为例)
    一、站在巨人的肩膀上这里我们借鉴YOLOv8源码:上期说到,对于网络模块定义详情在common.py这个文件,如Conv、CrossConv、C3f等。本期要修改的需要参考YOLOv8里的C2f模块,它定义在YOLOv8的module文件夹的block.py文件里(与common.py一样),源码链接如下:YOLOv8源码https://github.com/u......
  • ICESat-2 ATL08 数据批量读取
    ICESat-2ATL08数据概述ICESat-2(Ice,Cloud,andlandElevationSatellite-2)是美国宇航局(NASA)的一颗卫星,旨在测量地球的冰盖、云层和陆地的高程。ATL08数据产品专注于测量地表高程和植被的高度,主要用于研究森林、草地和冰川等地表特征。ATL08数据产品结构ATL08数据产品是......