对于:
之前遇到VSCode的bug:
【未解决】Mac中VSCode中Command+鼠标点击无法新建markdown文件
但是无法解决。
导致需要手动操作,一个个去新建对应文件。很是麻烦。效率很低。
突然想到,可以写Python脚本实现对应功能。
去写脚本
输入:
/Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md
输出:
/Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/
下面建立出对应的markdown文件
且文件内部,加上对应的 一级标题:
去写python
/Users/xxx/dev/crifan/gitbook/gitbook_template/common/tools/generate_md_from_summary.py
期间遇到:
【已解决】Python文件支持运行时从命令行传入参数
继续写代码调试:
到了kill
eachLine=* [kill](commands/process/kill.md) mdName=kill, mdPath=commands/process/kill.md
输出:
Created md: /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/commands/process/kill.md
去看看创建的文件:
是可以创建的。
是我们希望的。
继续:
。。。 mdName=数据恢复, mdPath=dev_summary/data_restore.md Created md: /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/dev_summary/data_restore.md eachLine=* [模拟Linux系统](dev_summary/emulate_linux.md) mdName=模拟Linux系统, mdPath=dev_summary/emulate_linux.md Created md: /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/dev_summary/emulate_linux.md eachLine=* [附录](appendix/README.md) mdName=附录, mdPath=appendix/README.md Existed md: /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/appendix/README.md eachLine=* [参考资料](appendix/reference.md) mdName=参考资料, mdPath=appendix/reference.md Existed md: /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/appendix/reference.md
去看看比较靠后的一个:
也是可以的。
不过,突然想到了:
额外加上功能:
当文件已存在,可以更新文件
-》使得文件最后更新时间是当前最新时间
-》且如果为了避免代码导致最后更新时间都一样,不像人工更新的,那么可以:
-》加上支持:更新的最后更新时间是,当前时间-一段时间(比如10分钟)- 当前时间
去加上参数支持
去实现:
【已解决】Python更新文件最后修改时间
【总结】
代码:
#!/usr/bin/python # -*- coding: utf-8 -*- """ Function: Generate gitbook markdown files from entry md file SUMMARY.md. if md existed, update md file time. Author: Crifan Li Update: 20210509 """ import argparse import os import re from datetime import datetime import random argParser = argparse.ArgumentParser() argParser.add_argument("-f", "--md-file", type=str, required=True, help="full path of entry SUMMARY.md file") argParser.add_argument("--disable-update-existed-md", action='store_true', help="disable update existed md file modification time") argParser.add_argument("--enable-use-random-time", action='store_false', help="enable use random time for update time") argParser.add_argument("-r", "--random-range", type=int, default=10*60, help="for random time, the range. in seconds. default 600 = 10 minutes") args = argParser.parse_args() # if not args.file: # raise Exception("SUMMARY.md file required !") summaryMdFullPath = args.md_file # isUpdateMdWhenExist = args.update_existed_md print("args.disable_update_existed_md=%s" % args.disable_update_existed_md) isUpdateMdWhenExist = not args.disable_update_existed_md isRandomUpdateTime = args.enable_use_random_time randomRange = args.random_range # # for debug # summaryMdFullPath = "/Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md" # isUpdateMdWhenExist = True # isRandomUpdateTime = True # randomRange = 10 * 60 # in seconds print("summaryMdFullPath=%s" % summaryMdFullPath) print("isUpdateMdWhenExist=%s" % isUpdateMdWhenExist) print("isRandomUpdateTime=%s" % isRandomUpdateTime) print("randomRange=%s" % randomRange) bookRootPath = os.path.dirname(summaryMdFullPath) print("bookRootPath=%s" % bookRootPath) summaryMdLineList = open(summaryMdFullPath).readlines() # print("summaryMdLineList=%s" % summaryMdLineList) def updateFileTime(filePath, newAccessTime=None, newModificationTime=None, isAccessSameWithModif=True): """Update file access time and modification time Args: filePath (str): file path newAccessTime (int): new file access time, float newModificationTime (int): new file modification time, float isAccessSameWithModif (bool): make access same with modification Returns: None Raises: Examples: newModificationTime=1620549707.664307 """ if (not newAccessTime) and (not newModificationTime): return statInfo = os.stat(filePath) # print("statInfo=%s" % statInfo) # print("statInfo.st_info=%s" % statInfo.st_info) if not newAccessTime: oldAccessTime = statInfo.st_atime # 1619490904.6651974 # print("oldAccessTime=%s" % oldAccessTime) newAccessTime = oldAccessTime if not newModificationTime: oldModificationTime = statInfo.st_mtime # 1617002149.62217 # print("oldModificationTime=%s" % oldModificationTime) newModificationTime = oldModificationTime if isAccessSameWithModif: newAccessTime = newModificationTime os.utime(filePath, (newAccessTime, newModificationTime)) summaryMdLineCount = len(summaryMdLineList) print("Total md line count: %d" % summaryMdLineCount) for curIdx, eachLine in enumerate(summaryMdLineList): curNum = curIdx +1 print("%s %s %s" % ("-"*20, curNum, "-"*20)) eachLine = eachLine.strip() # print("eachLine=%s" % eachLine) # * [Linux系统概述](linux_sys_overview/README.md) foundMd = re.search("\*\s+\[(?P<mdName>[^\]]+)\]\((?P<mdPath>[\w/]+\.md)\)", eachLine) if foundMd: mdName = foundMd.group("mdName") mdPath = foundMd.group("mdPath") print("mdName=%s, mdPath=%s" % (mdName, mdPath)) mdAbsPath = os.path.join(bookRootPath, mdPath) mdFolderPath = os.path.dirname(mdAbsPath) if mdFolderPath: os.makedirs(mdFolderPath, exist_ok=True) if os.path.exists(mdAbsPath): # print("Existed md: %s" % mdAbsPath) print("Existed md: %s" % mdPath) if isUpdateMdWhenExist: curDateTime = datetime.now() # datetime.datetime(2021, 5, 9, 16, 41, 9, 399425) curTimestamp = curDateTime.timestamp() # 1620549669.399425 if isRandomUpdateTime: lessTime = random.randint(0, randomRange) # 13451 newModifTime = curTimestamp - lessTime # 1620554635.993749 -> 1620541184.993749 else: newModifTime = curTimestamp updateFileTime(mdAbsPath, newModificationTime=newModifTime) # print("Updated modifiy time for md: %s" % mdAbsPath) print("Updated modifiy time for md: %s" % mdAbsPath) else: with open(mdAbsPath, "w") as mdFp: titleMdStr = "# %s\n" % mdName mdFp.write(titleMdStr) # print("Created md: %s" % mdAbsPath) print("Created md: %s" % mdPath)
效果:
- 没md,创建md
- 有md,(默认开启)更新文件时间
- (默认开启)且更新时间采用随机时间
- 随机时间范围默认 前10分钟~当前时间
调用方式举例:
cd /Users/xxx/dev/crifan/gitbook/gitbook_template/common/tools python generate_md_from_summary.py —help python generate_md_from_summary.py --disable-update-existed-md --enable-use-random-time -f /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md python generate_md_from_summary.py --disable-update-existed-md -f /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md python generate_md_from_summary.py -f /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md python generate_md_from_summary.py --enable-use-random-time -r 1200 -f /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md
最常用:
python generate_md_from_summary.py -f /Users/xxx/dev/crifan/gitbook/gitbook_template/books/linux_usage_dev_summary/src/SUMMARY.md
即可。
转载请注明:在路上 » 【已未解决】用Python从gitbook的markdown文件SUMMARY.md生成相关md文件