python-修改目录下带有特定字符的所有文件内容,文件名字,目录名字

python-修改目录下带有特定字符的所有文件内容,文件名字,目录名字

文章目录

问题

写了一个小工具,会检索给定目录下所有文件以及内容,目录的指定的字符,并替换想要的字符

同时会自动判断文档的格式是utf-8,gbk,或者其他类型,保证不读取出错
比如
check_word=[“111”,“222”,“333”,“4444”,“55”,“66”]

解决

import os,shutil
import re
import time
import datetime
import chardet
allFileNum = 0
myfile=[]
mydir=[]

def get_encode(file_my):
    file_my = open(file_my,mode='rb')  # 以二进制模式读取文件
    data = file_my.read()  # 获取文件内容
    file_my.close()  # 关闭文件
    result = chardet.detect(data)  # 检测文件内容
    return result["encoding"]
def printPath(level, path):
    global allFileNum
    ''''' 打印一个目录下的所有文件夹和文件 '''
    # 所有文件夹,第一个字段是次目录的级别
    dirList = []
    # 所有文件
    fileList = []
    # 返回一个列表,其中包含在目录条目的名称(google翻译)
    files = os.listdir(path)
    # 先添加目录级别
    dirList.append(str(level))
    for f in files:
        if (os.path.isdir(path + '/' + f)):
            # 排除隐藏文件夹。因为隐藏文件夹过多
            if (f[0] == '.'):
                pass
            else:
                # 添加非隐藏文件夹
                dirList.append(f)
                mydir.append(path + '/' + f)
        if (os.path.isfile(path + '/' + f)):
            # 添加文件
            fileList.append(f)
            myfile.append(path + '/' + f)
    # 当一个标志使用,文件夹列表第一个级别不打印
    i_dl = 0
    for dl in dirList:
        if (i_dl == 0):
            i_dl = i_dl + 1
        else:
            # print("得到的文件夹",'-' * (int(dirList[0])), dl)
            # 打印目录下的所有文件夹和文件,目录级别+1
            printPath((int(dirList[0]) + 1), path + '/' + dl)
    for fl in fileList:
        # print("得到的文件路径",'-' * (int(dirList[0])), fl)
        # 随便计算一下有多少个文件
        allFileNum = allFileNum + 1
def update_file(file_my):
    print("开始处理文件",file_my)
    #修改文件内容
    check_word=["111","222","333","4444","55","66"]
    change_word=["Learn_Java","learn01","learn02","learn03","learn04","learn05"]
    delete_word=["class"]
    old_name = file_my.split("/")[-1]
    if old_name.split(".")[1] in delete_word:
        os.remove(file_my)
    else:
        f = open(file_my, 'r')
        alllines = f.readlines()
        f.close()
        type_encode=get_encode(file_my)
        f = open(file_my, 'w+',encoding=type_encode)
        for eachline in alllines:
            for i in range(0,len(check_word)):
                eachline =eachline.replace(check_word[i],change_word[i])
            f.writelines(eachline)
        f.close()
        #修改文件名字
        base_path = file_my[:-len(old_name)]
        temp_old_name=old_name
        for i in range(0, len(check_word)):
            old_name = old_name.replace(check_word[i], change_word[i])
        os.rename(os.path.join(base_path,temp_old_name), os.path.join(base_path,old_name))
def update_folder(folder_my):
    print("开始处理文件夹",folder_my)
    #有一个规律,只有最后一个不同路径才是正确的,可修改的,否则就是之前修改过的,因此应该是逆序倒着修改
    charc_list=[]
    temp_folder=folder_my
    judge_name=folder_my.split("/")[-1]
    base_path=folder_my[:-len(judge_name)]
    temp_name=judge_name
    check_word = ["11","22"]
    change_word = ["Learn_Java","Learn_Java01"]
    for i in range(0, len(check_word)):
        judge_name = judge_name.replace(check_word[i], change_word[i])
    if temp_name!=judge_name:#如果名字变化说明不同了,应该修改
        os.rename(temp_folder,base_path+judge_name)
this_folder = input("需要更新信息的代码路径:").replace("\\",'/')
printPath(1, this_folder)
for i in myfile:
    print(i)
    i.replace("\\","/")
    update_file(i)
mydir=sorted(mydir,key=lambda x: len(x),reverse=True)
for i in mydir:
    print(i)
    update_folder(i)
input("已经处理完成,按任意键结束")
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100236.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 改变Ubuntu18.04初始键盘布局

    改变Ubuntu18.04初始键盘布局改变 Ubuntu18 04 初始键盘布局安装 Ubuntu 的时候把键盘布局选择成了英文 英国 然后键盘符号就是一团糟 把 打成 很是难受 然后在网上搜索都是依靠代码调出的图形界面来处理 结果重启之后键盘又恢复了原来的样式 可能不适合我的情况吧 自己摸索了以下 发现很简单 用不到那些代码 设置 gt 区域和语言在输入源里选择英语 英国 点击 再点击 选择英语 美

    2025年6月12日
    3
  • UNIX的常用命令「建议收藏」

    UNIX的常用命令「建议收藏」Unix常用命令介绍:  多命令行:“;”多行命令:“\”1、系统关闭reboot、halt/shutdown、poweroff2、passwd命令:修改系统用户密码passwd[username]3、su命令:切换系统用户su[-username]username为空表示root用户4、cat命令:将指定的文件在标准输出到显示器cat [-AbET] [文件名列表]-A      …

    2022年5月31日
    92
  • eBPF 学习路径总结「建议收藏」

    eBPF 学习路径总结「建议收藏」BPF学习路径总结•Feiskyhttps://feisky.xyz/posts/2021-01-06-ebpf-learn-path/目录1.为什么要学习BPF2.BPF应该怎么学习2.1BPF书籍2.2BPF学习样例3.BPF资料汇总3.1介绍系列3.2深入系列3.3Linux资源作者简介:狄卫华,趣头条资深架构师,主要关注云原生相关领域,目前聚焦在BPF技术及实践.1.为什么要学习BPF可以先从ebpf.i.

    2022年9月21日
    3
  • 从零实现SpringBoot简易读写分离,也不难嘛!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:温安适 my.oschina.net/floor/blog/1632565 最近在学习Spring boot,…

    2021年6月28日
    115
  • c++和java哪个好学_选 Python 还是 Java ?[通俗易懂]

    c++和java哪个好学_选 Python 还是 Java ?[通俗易懂]对于在校学生,以及要转行学编程的,把一门语言熟悉起来,非常的重要。对于初学编程,以及想要转行到编程领域的人来说,总有这么一个选择,选C++、Python、还是Java好呢?哪个前景更好、哪个好学、哪个好找工作,等等这类问题。熟悉我的都知道,我是从LinuxC/C++后台开发,转行到算法工程师,在大四实习的时候,做过Go开发,大四下做毕设的时候,用过Java、以及前端一些技术;相对…

    2022年7月7日
    27
  • iOS的三重缓冲和微型口吃(micro stuttering)

    iOS的三重缓冲和微型口吃(micro stuttering)Instrument中的Display模块:instrument-displayiOS中采用双重缓冲和三重缓冲一起使用,从display中就可以看出来。即:双缓冲不够用了就采用三缓冲。首先看看双重缓冲:双缓冲如上,此时双缓冲很够用,每次Vsync来到之前,上一帧的framebuffer(apple叫做surface+ID),所以帧率很高,基本在…

    2022年5月11日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号