关于文件名操作的小玩意儿

  • 在文件名前添加指定文字
  • 在文件名后添加指定文字
  • 删除文件名中指定文字
  • 获取文件名列表并写入txt文件



在网上下了一些课程资料,发现文件名都被加了小广告,读取文件的时候麻烦,就想着写个小程序来批量处理一下(函数名都瞎取的)。

在文件名前添加指定文字

先利用os.listdir()函数获取所选文件夹的目录,并判断是否为文件夹,如果不是文件夹就存入Olddir中,再对Olddir进行遍历,使用os.path.splitext()函数将所选文件夹的文件名和文件后缀名分别储存,以便进行后续的文件名修改操作,下面的是在文件名前添加指定文字,所以Newdir中存入的就是(text + filename + filetype),这就是添加后新的文件名了,最后调用os.rename()函数进行重命名即可。

# 在文件名前添加指定文字
def fore_add():
    text = text_entry.get()
    # 获取文件夹中的目录
    filelist = os.listdir(path)
    for files in filelist:
        Olddir = os.path.join(path, files)
        # 排除掉所选文件夹中的文件夹
        if os.path.isdir(Olddir):
            continue
        # 获取文件名
        filename = os.path.splitext(files)[0]
        # 获取文件后缀
        filetype = os.path.splitext(files)[1]
        Newdir = os.path.join(path, text + filename + filetype)
        # 调用重命名函数进行重命名
        os.rename(Olddir, Newdir)

在文件名后添加指定文字

与在文件名前添加指定文字差不多,就是Newdir中的内容稍有变化,即(filename + text + filetype),其他操作一致。

# 在文件名后添加指定文字
def end_add():
    text = text_entry.get()
    filelist = os.listdir(path)
    for files in filelist:
        Olddir = os.path.join(path, files)
        if os.path.isdir(Olddir):
            continue
        filename = os.path.splitext(files)[0]
        filetype = os.path.splitext(files)[1]
        Newdir = os.path.join(path, filename + text + filetype)
        os.rename(Olddir, Newdir)

删除文件名中指定文字

与在文件名中添加指定文字相比,需要将文件名中的指定文字删除,可以使用字符串自带的*.replace()方法或者正则表达式的re.sub()方法:
replace():replace(…) method of builtins.str instance S.replace(old, new[, count]) -> str
两个必填参数
oldnew分别为需要替换的文本和替换为的文本,如果是删除就为“”空字符即可,第三个参数count为可选参数即替换次数。
除了使用字符串中的方法,还可以使用re正则表达式库来实现。
使用re.sub()方法:
sub(pattern, repl, string, count=0, flags=0)
pattern代表指定的模式,对于指定文字可以直接使用指定文字作为参数;repl代表的是需要替换成的字符,如果需要删除即为空字符;string代表的是需要被替换的字符串。count为可选参数,和replace()的一样指的是替换的次数。
Tips:无论是Python字符串自带的
.replace()方法,还是re提供的.sub()*方法,都是不会改变原来的字符串的,只有返回值才是替换的字符串。所以,如果要使用替换的字符串,就需要将返回值赋值给一个变量。

# 删除文件名中指定文字
def delete_words():
    text = text_entry.get()
    # 获取文件夹中的目录
    filelist = os.listdir(path)
    for files in filelist:
        Olddir = os.path.join(path, files)
        # 排除掉所选文件夹中的文件夹
        if os.path.isdir(Olddir):
            continue
        # 获取文件名
        filename = os.path.splitext(files)[0]
        # 在文件名中删去指定字符
        print(filename)
        filename = re.sub(text, '', filename)
        print(text)
        print(filename)
        # 获取文件后缀
        filetype = os.path.splitext(files)[1]
        Newdir = os.path.join(path, filename + filetype)
        # 调用重命名函数进行重命名
        os.rename(Olddir, Newdir)

获取文件名列表并写入txt文件

对之前获取的文件名列表,按格式存入字符串中,再添加一个用于记数的count来进行记数,稍微做下统计。在这里用的是先把各个文件名存入字符串然后采用覆盖写模式,而循环列表采用非追加写模式是为了防止在同一个文件夹多次运行后会产生重复。
在打开了文件后需要注意及时关闭文件,建议使用 with语句,在with块结束或发生错误的情况下,系统会自动关闭文件。

# 获取文件名列表并写入txt文件
def file_name2txt():
    # 统计该文件夹中文件数量
    count = 0
    filelist = os.listdir(path)
    txt = ''
    # 使用 with语句,在with块结束或发生错误的情况下,系统会自动关闭文件
    with open(str(path) + '/File_List.txt', 'w') as reader:
        for file in filelist:
            if os.path.isdir(file):
                continue
            txt = txt + file + '\n'
            count += 1
        txt = txt + '*该文件夹中文件总数为' + str(count) + '个\n'
        reader.write(txt)

代码下载链接:文件夹内文件批量操作程序,用于批量在文件名前/后增加指定文字或删除指定文字,带tkinter做的简单界面。