代码编织梦想

🚩 写在前面

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

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

⭐ 功能规划(以掘金为例)

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

  • 掘金不支持CSDN中双等号的高亮语法 ==高亮文本== 。
  • 掘金不支持像*.png =x300这样调整图片大小的语法。
  • 掘金连续的两行显示出来中间只有一个空格,有空行才会换行
  • 掘金不支持用@[toc]在博客中显示文章目录。

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

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

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

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

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

📜 开始干活

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

在这里插入图片描述

于是我找到了以下能 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文件)

在这里插入图片描述

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

🧭 待改进的地方

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

个人主页-CSDN:清风莫追

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_63238256/article/details/127158080

用python 求两地的直线距离-爱代码爱编程

通过百度,搜索到了球面直线距离计算公式 比如你要求point1(lng1,lat1) 和 point2(lng2,lat2)的距离Distance,那么 Distance = R*arccos(cos(lat1*pi/180 )*cos(lat2*pi/180)*cos(lng1*pi/180 -lng2*pi/180)+sin(lat1*pi/180

python的format函数_不论如何未来很美好的博客-爱代码爱编程

还在用%吗?快学会使用format吧!!!好处大大的有: 1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型2.单个参数可以多次输出,参数顺序可以不相同3.填充方式十分灵活,对齐方式十分强大 4.官方推荐用的方式,%方式将会在后面的版本被淘汰 所以看完这篇文章后你又进击了一步: 再说一句,我以前也一直使用%,这是在学习C语言的时候留下的“

我是如何学习json,jquery,ajax这些技术,并学习致用_weixin_44019016的博客-爱代码爱编程

今天就原来计划要完成的开发的事情,重新再总结。 由于原来对这方面(Ajax,Jquery,JSON)的概念与基础,稍为模糊,因此,我的思路是这样: 1.做任何事情 ,首先要了解其背影,及其背后的故事 阅读了其故事之后

最全Python学习路线图,21天学会Python!-爱代码爱编程

原创 最全Python学习路线图,21天学会Python! 2019-08-20 11:18:20 weixin_38744153 阅读数 1664

1. 开篇词:为什么要学习计算机组成原理-爱代码爱编程

1. 为什么要学习计算机组成原理 答:方式一 1)是专业核心基础课,在课程体系中起着承上启下的关键作用。 2)移动互联时代发展的迫切需求:专业地位凸显 关键词:大数据、云计算、物联网、移动互联 举例:移动计算对信息处理终端在无线环境下的数据传输、数据处理和资源共享等应用提出了高效(资源占用少)、准确(可靠)、及时(响应执行速度快)等要求。 需求:大量 “

python项目开发实例书-Python项目开发实战-爱代码爱编程

本书案例具有实用性,如校园网搜索引擎、小小翻译器、抓取百度图片这些爬虫案例略加修改可以应用实际项目中;还有通过微信通信协议开发微信机器人,机器学习的文本分类、基于卷积神经网络的手写体识别等案例,另外是一些大家耳熟能详的游戏案例,比如连连看、推箱子、中国象棋、网络五子棋、两人麻将、人物拼图和飞机大战游戏等,让你对枯燥的Python语言学习充满乐趣 ¥70.

python绘制社会关系网络图_文本分析之制作网络关系图(Python)-爱代码爱编程

最近忙于学术,公众号更新的有点慢了,在这里给大家个歉,希望大家能继续支持我。由于学术需要,未来一段时间,我以后会有一些文本分析的脚本要出现,希望大家喜欢。 目前简单的文本分析已经满足我人物需要,所以还不会去学机器学习,任务导向是最好的学习方法。希望大家也能找点有意思任务,python下。 今天给大家带来我写好的脚本,用来分析社会网络关系。 这个图我没

python爬取结果切片_Python爬虫入门实战之猫眼电影数据抓取(实战篇)-爱代码爱编程

项目实战 静态网页实战 本节我们将为大家展现一个完整爬虫的大致过程,此次项目内容为提取猫眼电影TOP100榜中的所有电影信息并存储至CSV文件中,其首页地址为 http://maoyan.com/board/4 ,在3.2.2中我们已经获取过第一页中的所有电影名了,但是如何获取第二页、第三页的数据呢,即获取第二页第三页对应的URL,那么我们可以在浏

技术学习:python | 学习自我介绍_六月暴雪飞梨花的博客-爱代码爱编程

活动地址:CSDN21天学习挑战赛 首先介绍下自己,老菜鸟一枚,原来学习的是Java,已经入职多年,目前在做数据治理和大数据方向工作。今年打算停下来,边工作边学习下新语言,主要想通过这21天的学习,领悟

python 学习起来挻有感觉的,坚持下去,加油,打磨专业东东_odoo t-爱代码爱编程

fqfq123456的专栏 [原]odoo15 项目界面优化odoo15 项目界面优化 目录 项目界面使用问题 1 只有看板状态,没有列表,查看相应详细点的不方便,增加tree视图 2、查看项目详情时,需要两步,先点三点,再点编辑 3、进度更新,是项目管理常用功能,葳的有些深,不易找 项目界面使用问题 1 只有看板状态,没有列表,查看相应详细点的不方

学python,自建erp想法_python tkniter erp-爱代码爱编程

大学毕业后,在车间一线做实习技术员,也就是从一线员工做起,有大半年的车间,在车间的每个工种实习一下,从大学中学到的知识,到真实进入车间工人干起,明白了什么叫学不致用,如何才能学以致用,发现,结合我们大学所学,先发现实际工作中的问题,爱“找事‘,爱思考很重要,如果发现问题也象工人一样,发牢骚,或习以为常,就完了,仅发现问题,还不够,这时你如能静下心来,分析问

python学习4-爱代码爱编程

python学习4 数据类型 字符串 word = '字符串' sentence = "这是一个句子。" paragraph = """这是一个段落, 可以由多行组成""" 单引号和双引号如何选择? 包含单引