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

因为几千个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个

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值