【python-致用】为嫖掘金月更奖品,我用刚学的python做了个批量文件内容替换

简介: 【python-致用】为嫖掘金月更奖品,我用刚学的python做了个批量文件内容替换

写在前面


前几天学习了python的文件读取操作,可以用来干点什么呢?嘿,正好很多平台都推出了博客月更活动,但由于不同的平台环境(如markdown语法差别、活动要求),每搬运一篇博客都要幸苦地进行一些重复性的手动修改,实在是麻烦。人生苦短,我决定试试 python 能不能帮我做这件事。


小贴士: 不必完全按照文章的编写顺序阅读,可以先试着看看效果展示。


功能规划(以掘金为例)

1、其实我们需要做的事情很简单,就是对文本进行一些增添、删除和替换。要把博客搬运到掘金,首先要面对一些掘金不支持(或效果不同)的 markdown 语法:


掘金不支持CSDN中双等号的高亮语法 ==高亮文本== 。

掘金不支持像*.png =x300这样调整图片大小的语法。

掘金连续的两行显示出来中间只有一个空格,有空行才会换行

掘金不支持用@[toc]在博客中显示文章目录。

2、如果你要参加更文活动,往往还需要再博客中附上相应的活动描述、活动链接:


需要去掉CSDN的更文活动链接,例如:CSDN话题挑战赛第2期 参赛话题:学习笔记

然后加上掘金的更文活动链接,例如:持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第N天,点击查看活动详情

3、为了让博客更加美观,还可以加上掘金的 markdown 主题:


---
theme: healer-readable
highlight: a11y-dark
---

4、最后,还可以做一些个性化的修改:


例如,在自己CSDN个人主页的链接前,加上CSDN标志词

开始干活

虽然学了文本的读取,但我还不会使用 python 进行文本的替换,怎么办呢?此时我们打开CSDN的搜索框,输入:python 替换文件内容,然后C一下


image.png


于是我找到了以下能 r u n runrun 的代码:(原文链接,Python 修改文件内容3种方法(替换文件内容))


import os
def alter(file,old_str,new_str):
    #"""
    #将替换的字符串写到一个新的文件中,然后将原文件删除,新文件改为原来文件的名字
    #:param file: 文件路径
    #:param old_str: 需要替换的字符串
    #:param new_str: 替换的字符串
    #:return: None
    #"""
    with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
        for line in f1:
            if old_str in line:
                line = line.replace(old_str, new_str)
            f2.write(line)
    os.remove(file)
    os.rename("%s.bak" % file, file)
alter("file1", "python", "测试")

上面这段代码将文本替换的操作打包在了一个函数里,只能说真的很棒,copy 下来马上就能投入使用。但这还只有文本的替换,我们还需要添加和删除文本,要怎么办呢?


删除: 将目标文本替换为空字符串即可,例如:alter("file1", "python", "")

添加: 可在原代码基础上做些修改即可,请看下面的代码

import os
def add_font(file, text):
    # 将 text 字符串添加在文件开头
    with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
        f2.write(text)
        for line in f1:
            f2.write(line)
    os.remove(file)
    os.rename("%s.bak" % file, file)

但是,一次只能替换一个文件中的内容,如果你有 50 篇博客要搬运,就要将脚本运行 50 次,是不是太慢了?于是我们还可以试着实现文件的批量操作,利用下面的代码我们就能得到当前 python 脚本所在目录下,所有文件名构成的一个列表。可以自己试着用pirnt(dirs)打印出来看一看。


path = './' # 该 py 脚本所在目录
dirs = os.listdir(path)

但是请一定小心,我们要修改的只是记录博客的 markdown 文件,后缀为.md,不要把其它的文件也修改掉了。小贴士:最好将该 python 脚本单独放在一个专用的文件目录下!。


可以使用通配符来进行.md文件的筛选:(参考资料:【Python】python通配符,使用通配符进行字符串匹配 )


# 记得导入依赖的包!
from fnmatch import fnmatch 
print(fnmatch(filename, '*.md'))

如果文件filename后缀为.md,fnmatch函数就会返回 true,否则返回 false 。


产品新鲜出炉(代码实现)

计划的差不多了,下面就动手来将它实现叭:


# -*- coding: utf-8 -*-
import os
from fnmatch import fnmatch
# -----------------------------------------------------------------------------------------------   
def alter(file,old_str,new_str):
    # """
    # 将替换的字符串写到一个新的文件中,然后将原文件删除,新文件改为原来文件的名字
    # 小贴士:采用按行匹配,故传入的字符串参数不应包含多行
    # :param file: 文件路径
    # :param old_str: 需要替换的字符串
    # :param new_str: 替换的字符串
    # :return: None
    # """
    with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
        for line in f1:
            if old_str in line:
                line = line.replace(old_str, new_str)
            f2.write(line)
    os.remove(file)
    os.rename("%s.bak" % file, file)
# -----------------------------------------------------------------------------------------------   
def add_font(file, text):
    # 在开头添加一段字符串
    with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
        f2.write(text)
        for line in f1:
            f2.write(line)
    os.remove(file)
    os.rename("%s.bak" % file, file)
# -----------------------------------------------------------------------------------------------   
# 主程序
path = './' # 该 py 脚本所在目录
dirs = os.listdir(path)
num = 1
for filename in dirs:
    if(fnmatch(filename, '*.md')):
        print(str(num) + '  ' + filename)
        num = num + 1
print('以上为当前目录下的所有 md 文件,是否继续替换?\n')
input('按回车开始替换')
for filename in dirs:
    if(fnmatch(filename, '*.md')):
        print('已替换:'+filename)
        add_font(filename, "---\ntheme: healer-readable\n---\n持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第N天,[点击查看活动详情](https://juejin.cn/post/7147654075599978532 \"https://juejin.cn/post/7147654075599978532\")\n")
        alter(filename, "[清风莫追]", "[CSDN清风莫追]")
        alter(filename, " =300x", "") 
        alter(filename, " =400x", "")
        alter(filename, " =500x", "")
        alter(filename, "==", "**")
        alter(filename, ">个", ">\n>个")
        alter(filename, ">系", ">\n>系")
        alter(filename, ">推", ">\n>推")
        alter(filename, "> 个", ">\n> 个")
        alter(filename, "> 系", ">\n> 系")
        alter(filename, "> 推", ">\n> 推")
        alter(filename, "@[toc]", "")
        alter(filename, "[CSDN话题挑战赛第2期](https://marketing.csdn.net/p/7b6697fd9dd3795a268d1a6f2fe75012)", "")
        alter(filename, "参赛话题:[学习笔记](https://activity.csdn.net/creatActivity?id=10213)", "")
print("已将所有md文档替换为掘金10月月更版本!")

效果展示

左:替换后的效果 | 右:原始效果


image.png


第一步:将写好的脚本和待替换的文件放在同一目录下


image.png


第二步:运行脚本(注意不是直接点击运行,我们假设你已经懂得如何运行python文件)


image.png


然后就 O K OKOK 啦,快将你替换后的文件复制到掘金看看效果吧!


待改进的地方

1、换行: 连续的两行在掘金中将被当作一行,当中间有空行时,才显示为两行。但是我又不能简单地在所有行末都加上一个换行符,比如在贴代码时,换行又不会需要中间有空行。这个还没想好怎么处理。

2、通配符: 搜索待替换的文本时,最好可以用到通配符的方法。比如调整图片比例的语法会产生很多相似的字符串:=x500,=x400,=x300。

3、不够自动化: 还是要先将博客从CSDN上一篇一篇地导出到本地,要是以后可以自动爬取下来就好了。

4、使用不够方便: 当文本替换的需求变化时,就需要在代码里进行修改。

······

欢迎大家提出自己的建议!

相关文章
|
1月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
2天前
|
存储 算法 文件存储
探秘文件共享服务之哈希表助力 Python 算法实现
在数字化时代,文件共享服务不可或缺。哈希表(散列表)通过键值对存储数据,利用哈希函数将键映射到特定位置,极大提升文件上传、下载和搜索效率。例如,在大型文件共享平台中,文件名等信息作为键,物理地址作为值存入哈希表,用户检索时快速定位文件,减少遍历时间。此外,哈希表还用于文件一致性校验,确保传输文件未被篡改。以Python代码示例展示基于哈希表的文件索引实现,模拟文件共享服务的文件索引构建与检索功能。哈希表及其分布式变体如一致性哈希算法,保障文件均匀分布和负载均衡,持续优化文件共享服务性能。
|
2月前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
61 20
|
2月前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
105 8
|
2月前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
2月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
3月前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
90 7
|
5月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
778 60
|
5月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
168 3
python知识点100篇系列(15)-加密python源代码为pyd文件
|
5月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
214 1
Python实用记录(十三):python脚本打包exe文件并运行

热门文章

最新文章