前言
最近一直在准备面试啊笔试啊什么的,写着写着代码就很多了。又不能每一个代码都写成博客,要不然质量也没法保证。于是想着在GitHub上建一个repository好了。整理进去,也保证了代码的安全性,万一以后要复习了也很方便。
但是面临的一个问题就是“懒”,面对看起来蛮多的文档,一个一个的写标签似乎不是合适的选择,所以还是让程序帮我自动生成吧。
实现
实现所需步骤如下:
- 获取给定路径下的所有文件的全路径
- 获取每一个文件内特有的描述信息
- 将全路径和描述信息写到readme文件中
下面就一一来实现这些步骤。
获取指定路径下所有文件的全路径
由于不知道文件夹下具体是什么情况,所以递归是一个比较贴切的选择。
def pathwalk(path='.', result=[]):
dirlist = os.listdir(path=path)
for item in dirlist:
child = os.path.join(path, item)
if os.path.isfile(child):
result.append(child)
# print(child)
else:
pathwalk(child, result)
获取文件描述信息
我个人写代码会使用IDE在新建文件的时候生成一些固定格式的内容,大致如下:
# coding: utf8
# @Author: 郭 璞
# @File: mkreadme.py
# @Time: 2017/4/14
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 将当前目录中所有的文件生成markdown文件特有的链接形式
每一个文件的Description部分都是不一样的。一般按照代码实现的功能来描述,这样即使过了好几天,也能快速的理解代码到底做了什么。我觉得这是个不错的习惯,共勉。
获取的方式也很简单,利用字符串内置的匹配即可。
def getdescription(list):
return "".join([str(item) for item in list if "@Description:" in str(item)])
我们把文件读成list内容,然后对含有描述信息的元素提取出来即可。(因为格式比较特殊,所以很少会有不相干的元素混入,虽然也会有这个可能。)
得到具体的描述信息还需要下面的处理:
temp = getdescription(f.readlines())
temp = temp[15:]
生成readme
GitHub上的README.md文件是使用的Markdown格式,所以接下来简要的生成Markdown格式的内容,然后追加到文件中就好了。
def generate(files=[], outputpath='./readme.md'):
info = {}
for file in files:
if 'readme.' in str(file):
continue
with open(file, 'r', encoding='utf8') as f:
temp = getdescription(f.readlines())
temp = temp[15:]
info[str(file)] = temp
f.close()
# print(len(info), info)
info = {k:v for k,v in info.items() if v!='' and 'readme.' not in str(k)}
print(len(info), info)
# 生成Markdown文件
with open(outputpath, 'a', encoding='utf8') as f:
# f.write('标题部分\n---')
for key, value in info.items():
temp = " - [{}]({})\n\n".format(value, key)
f.write(temp)
f.close()
print('文件已生成!')
效果
最后来看下实现的最终效果。
看起来还算是差强人意。
最后要注意的是,在上传到GitHub上的时候,目录信息需要更新一下,加个前缀啥的,这样可以再GitHub上直接点这些链接,就可以看到内容了。
总结
虽然这个脚本不算啥,但是确实是挺实用的(对我个人而言)。需要改进的地方还有很多,标题啊,缩进列表啊,表格啊,什么的都需要实现一下,这样才算是有价值,不过对我而言,目前也就需要这么点功能了。就先不折腾了。
就先到这吧,还得继续学习呢。 (^__^) 嘻嘻……