【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一下 😄

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

于是我找到了以下能 r u n run run 的代码:(原文链接,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后缀为.mdfnmatch函数就会返回 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月月更版本!")
    

🌾 效果展示

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

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

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

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

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

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

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

🧭 待改进的地方

1、换行: 连续的两行在掘金中将被当作一行,当中间有空行时,才显示为两行。但是我又不能简单地在所有行末都加上一个换行符,比如在贴代码时,换行又不会需要中间有空行。这个还没想好怎么处理。
2、通配符: 搜索待替换的文本时,最好可以用到通配符的方法。比如调整图片比例的语法会产生很多相似的字符串:=x500=x400=x300
3、不够自动化: 还是要先将博客从CSDN上一篇一篇地导出到本地,要是以后可以自动爬取下来就好了。
4、使用不够方便: 当文本替换的需求变化时,就需要在代码里进行修改
······
欢迎大家提出自己的建议!

个人主页-CSDN:清风莫追文章来源地址https://www.toymoban.com/news/detail-656337.html

到了这里,关于【python-致用】为嫖掘金月更奖品,我用刚学的python做了个批量文件内容替换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序管理奖品(抽奖)

    功能: 使用微信小程序vant-weapp 组件库中的upload组件以及两个input框 最后拿到的值是一个数组对象的形式 主要代码如下: wxml js 需要赋值回显的话: 确认提交按钮 记得点赞关注,后续会发布更多实用文章

    2024年02月04日
    浏览(39)
  • 人生苦短,我用Python

    Python,人生必备技能,比起人生苦短,Python更长久。你们学Python了吗? Python是一门易学易用的编程语言,对于初学者来说,入门并不困难。我是通过在线课程学习Python的,其中比较有名的网站有Coursera、Udemy、Codecademy等。我还阅读了一些Python的书籍,如《Python基础教程》、《

    2024年02月06日
    浏览(40)
  • 刚学完二叉树,来试试这些oj题练练手吧!

    🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介::记录力扣的一些有关二叉树的入门题目.分享解题经验. c语言实现:单值二叉树,相同的树,对称二叉树 金句分享: ✨总不能一生碌碌

    2024年02月12日
    浏览(34)
  • Angular 17+ 高级教程 – 学以致用

    读这么多原理,到底为了什么?真实项目中真的会用得到吗? 你正在疑惑 \\\"知识的力量\\\" 吗? 本篇会给一个非常非常好的案例,让你感悟 -- 知识如何用于实战。 记住,我的目的是让你感悟,而不是要你盲目相信知识。   下面是我在 2020-11-06 记入的一个问题。 一模一样的问题

    2024年04月22日
    浏览(37)
  • 我用python/C++自制了一个聊天机器人

    2015年, OpenAI 由马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始人彼得·蒂尔等硅谷科技大亨创立,公司核心宗旨在于 实现安全的通用人工智能(AGI) ,使其有益于人类。 ChatGPT 则是近期 OpenAI 推出的一个基于对话的原型 AI 聊天机器人,2022年

    2023年04月17日
    浏览(39)
  • 人生苦短我用Python,Python基础教程,让你从入门到熟悉

    这篇是Python基础教程系列的总结篇,这里是这个专栏的地址:《Python教程》 欢迎关注公众号学习更多编程知识:一点sir 首先必须声明一点,这是基础教程,所以面向的是新人,没有学过Python的同学,所以这套教程并没有涉及到比较难的并发编程模块,像多线程、多进程以及

    2024年03月24日
    浏览(51)
  • 当我用Python爬取了京东商品所有评论后发现....

    不知道各位网购的时候,是否会去留意商品评价,有些小伙伴是很在意评价的,看到差评就不想买了,而有些小伙伴则是会对差评进行理性分析,而还有一类人不在乎这个。 当然这都是题外话,咱们今天主要的目的是使用Python来爬取某东商品的评价,并保存到CSV表格。 在进

    2024年02月11日
    浏览(36)
  • 太好玩了!我用 Python 制作一款小游戏!

    超级玛丽、魂斗罗、坦克大战、冒险岛……提到这些游戏,“80后”、\\\"90后\\\"滔滔不绝,掀起一波回忆杀。 最近不少媒体发文称:“小霸王被申请破产”。其实,不管有没有破产,小霸王终究只能成为童年回忆了,它的落寞是不争的事实,曾风靡全国的光辉再也回不去了。 今

    2024年03月19日
    浏览(41)
  • @全体开发者们,ChunJun 有奖征文,精美奖品,快来参加!

    2022年4月,在 FlinkX 进行初版开源的整整四年后,技术团队决定对FlinkX进行整体升级,并更名为 ChunJun。到目前为止,ChunJun 正式更名上线已经过了一年多了。作为一款稳定、易⽤、⾼效、批流⼀体的数据集成框架,相信各位关注着、喜爱着、使用着 ChunJun 的开发者们在过去的

    2024年02月09日
    浏览(35)
  • 人生苦短,我用Python 九:Flask接口并发处理:多进程、多线程

    Windows 我现在有一个flask接口文件,我有个需求:, 让这个接口可以并发处理10个请求任务,每个任务中有7个子线程任务,这7个子线程任务,为的是加快,每个请求任务的处理速度。 进程是操作系统中的一个基本概念,用于描述正在运行的程序。简单来说,进程是计算机中正

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包