「Python」重命名文件夹内所有文件

2023-05-17 15:31:58 浏览数 (1)

人生苦短,我用Python.

请注意,本文编写于 1004 天前,最后修改于 1004 天前,其中某些信息可能已经过时。

不到100行代码实现对文件夹内所有文件重命名,支持文件夹多层嵌套(理论支持无穷嵌套,只要你的计算机内存够大)。

两种重命名模式:

  1. 实现所有文件名都用随机20位字母数字代替;
  2. 在原有文件名前加上前缀。

注意:

  1. windows环境中Python自动获取的路径os.getcwd()很诡异,尽量自己手动输入路径;
  2. 利用了递归实现了文件夹嵌套,请注意,递归的过程中是占用内存的,理论上支持文件夹的无穷嵌套,但也仅仅是理论上;
  3. 运行环境为Python 3.7.2 64-bit windows平台,若在Linux平台运行该代码,要考虑文件夹分隔符的改变。
代码语言:javascript复制
# 导入系统模块
import os  # 用于文件处理
import random  # 用于生成随机文件名
from pathlib import Path  # 用于获取本文件名


def getAllFiles(filePath=os.getcwd()):
    '''
        递归获取文件夹内所有文件
        filePath:文件夹路径
    '''
    # 获取的当前文件夹路径不是当前文件所在的文件夹路径,而是Python程序运行时CMD窗口所运行的文件夹!
    fileList = os.listdir(filePath)

    # 判断路径为文件还是文件夹
    for file in fileList:
        tempPath = filePath '\' file
        if os.path.isdir(tempPath):
            # 不是文件,进行递归操作
            getAllFiles(tempPath)
        elif os.path.isfile(tempPath):
            # 是文件
            if file != Path(__file__).name:
                # 跳过对当前正在执行的py文件重命名
                fileRename(tempPath)
        else:
            # 特殊无后缀文件
            print("it's a special file(socket,FIFO,device file):" tempPath)


def fileRename(filePath, myStr=''):
    '''
        对文件进行重命名
        filePath 为文件路径(绝对路径)
        myStr 为模式选择:
            mode = ''时:去除原来的文件名,随机生成一个由大写字母、小写字母和数字组成的20位字符串作为文件名
                例如:TNcxBZEvgZiH9OtqFMWC.jpg、fh4vUsewZ9y8RGBmLKg5.docx
            mode != ''时:在原文件名前追加一个字符串(举例输入为:myStr)
                例如:原文件名为 test.pptx,新文件名为 myStr_test.pptx
    '''

    splitSign = filePath.rfind('\')  # 获取文件名与路径分隔符位置
    filePathShort = filePath[:splitSign]  # 获取文件所在路径
    fileSuffix = filePath[filePath.rfind(".") 1:]  # 获取文件后缀

    if not myStr:
        # 随机重命名模式
        randomStr = ''.join(random.sample(
            'zyxwvutsrqponmlkjihgfedcbaABCDEFGHIJKLMNOPQRSTUZWXYZ0123456789', 20))  # 生成一个随机字符串(20位)
        os.rename(filePath, filePathShort '\'  
                  randomStr '.' fileSuffix)  # 重命名操作
    else:
        # 自定义模式
        fileName = filePath[splitSign 1:filePath.rfind(".")]  # 获取文件原名称
        os.rename(filePath, filePathShort '\' myStr   '_'  
                  fileName '.' fileSuffix)  # 重命名操作

    # 每重命名一个文件,计数器加1
    global fileNum
    fileNum  = 1


def printInfo():
    ''' 打印程序提示 '''
    print('='*40)
    print(' 欢迎使用本程序 '.center(33, ' '))
    print('='*40)
    print("使用须知:")
    print("1. 本程序基于Python 3.7.2 64-bit windows平台;")
    print("2. 输入文件路径中必须以'\'为分隔符。")
    print('='*40)


# 打印提示信息
printInfo()

# 获取用户输入路径,若为当前路径直接回车
inputFilePath = input("请输入文件夹路径:")

# 定义一个变量用来记录重命名文件数量
fileNum = 0

# 执行程序
if inputFilePath:
    # 用户输入了路径
    getAllFiles(inputFilePath)
else:
    # 用户输入为空,获取默认路径
    getAllFiles()
    inputFilePath = os.getcwd()

# 程序结束,打印结束信息
print(" 程序结束 ".center(36, '='))
print(f" 共对 {fileNum} 个文件完成操作 ".center(31, '='))
print(f"操作文件夹为:{inputFilePath}")

print('='*40)

----- END -----

0 人点赞