因为几千个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('<', '《')
name6 = name5.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个