python读取指定目录中所有文本文件的第一行,并以txt第一行内容进行批量重命名 您所在的位置:网站首页 python文件批量改名 python读取指定目录中所有文本文件的第一行,并以txt第一行内容进行批量重命名

python读取指定目录中所有文本文件的第一行,并以txt第一行内容进行批量重命名

2023-03-22 08:09| 来源: 网络整理| 查看: 265

因为几千个txt要重命名(平均每个3M大小)为txt第一行内容,写了一段python来进行批量重命名,自己用的时候遇到了很多问题,改了很多,这是最终版了。该版本可以解决9成问题,万一出了什么报错,建议把报错的那个文件给换个位置先把可以弄的文件弄好,报错的文件量不多直接手动改名字。  

# -*- coding: utf-8 -*- import os def make_pass(name): # windows对文件名有限制,用此函数规范名字内容 if len(name) > 60: name1 = name[0:60] name2 = name1.replace('?', '?') else: name2 = name.replace('?', '?') name3 = name2.replace(' ', '_') name4 = name3.replace('*', '?') name5 = name4.replace('', '》') name7 = name6.replace(':', ':') name8 = name7.replace('|', 'I') name9 = name8.replace('/', '') name10 = name9.replace('\\', '') name11 = name10.replace('\"', '“') name12 = name11.replace('\'', '‘') return name12 def do_rename(ul, tab, kind,filename, mark, coding, i): encoding =coding[i] try: openfile = open(ul + filename, 'r', encoding=encoding) firstline = openfile.readline() except UnicodeDecodeError: openfile.close() do_rename(ul, tab, kind, filename, mark, coding, i+1) else: try: openfile.close() newname0 = firstline.strip().split(mark, 1)[0] newname1 = make_pass(newname0) newname = newname1 + kind os.rename(os.path.join(ul, filename), os.path.join(ul, newname)) except FileExistsError: # 文件名相同情况下对文件名进行追加想要改的文件名,新旧文件名之间可加关键字进行分隔方便后期更改 newname00 = filename.split('.', 1)[0] + tab + firstline.strip().split(' ', 1)[0] newname01 = make_pass(newname00) newname02 = newname01 + kind os.rename(os.path.join(ul, filename), os.path.join(ul, newname02)) def make_name(ul, tab, kind, start, end, key, mark, coding, i): for filename in os.listdir(ul): key_vaule = key in filename if filename.startswith(start) and filename.endswith(end + kind) and key_vaule: # 筛选文件 do_rename(ul, tab, kind, filename, mark, coding, i) if __name__ == '__main__': coding = ['utf-8', 'gbk'] # 编码原因,懂得都懂,目前这两种够我用了,有别的需求自己加 i = 0 ul = 'C:\\Users\\zhong\\Desktop\\111\\' # 具体文件所属目录 tab = 'X159X' # 标记,可能用到 kind = '.txt' # 文件种类 end = '' # 文件结尾 start = '作者:' # 文件开头 key = '' # 文件中间 mark = ' ' # 文件第一行到什么为止,这里是空格 make_name(ul, tab, kind, start, end, key, mark, coding, i)

 因为编码问题没成功的可以在coding里加,这段代码会按编码顺序一个一个试的。

因为老师留了作业要完成的同学就别抄上面那个了,一看就是抄的。可以抄下面这段

import os ul='C:\\Users\\zhong\\Desktop\\111\\' # 具体文件所属目录 for filename in os.listdir(ul): if filename.startswith("read"): # 筛选文件以什么开头 with open(filename) as openfile: firstline = openfile.readline() os.rename(os.path.join(ul, filename), os.path.join(ul, firstline.strip()))

用的时候用第1个,交作业就拿第2个



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有