如何用PYTHON写自动化

直接写脚本就行了,举个例子:

书写工具:

1.设计目标:

首先,我想谈谈该工具的功能:

遍历一个目录中所有指定的后缀文件,包括其子目录,然后将指定的字符串插入这些文件的文件头。

2.使用场景:

设计这样一个工具的原因是我最近把CSDN的博客移到了我自己的Hexo博客空间。我应该知道,如果都是Markdown写的,我只需要在移动的时候在文件头增加以下额外的内容:

-

标题:博客标题

日期:博客创建的时间(例如:2016-09-03 17:15:22)

标签:标签(如[Hexo,Next],多个单词之间用,)分隔。

类别:分类(如网络)

- 123456

标题?标题?就用文件名去掉?。md?后缀足够;

时间?约会?你需要通过文件库获取文件的创建时间;

标签?标签?还有分类?类别?因为我的文件会按照分类放在不同的子目录下,所以我可以直接得到当前文件所在目录的名称。

另外,为了在博客的主页上只显示部分内容,而不是展开博客的全部内容,需要在博客的适当位置插入这个标签:

3.实施代码:

按照上面的思路,我们在哪里?来源/_帖子?目录来创建一个工具脚本,名为。SuitFileToHexo.py?,然后依次完成以下步骤:

在Linux环境下指定Python解释器目录,并指定编码方式:

#!/usr/bin/env python# -*-编码:utf-8 -*-

介绍的模块:

在脚本的开头,首先要做的是先介绍所有需要用到的模块,粗略分析一下我们这个功能需要的模块:

导入操作系统。路径,时间

1

遍历当前目录中的所有内容?。md?文件列表:

这就需要使用Python的文件目录操作模块了?os.path?,使用?os.listdir?得到一个目录列表,然后遍历?os.path.splitext?拆分文件名和后缀名来过滤符合条件的文件:

#获取带有指定后缀def的指定目录的文件列表getFileList(path,endStr):' '获取带有指定后缀' ' r_list = []的指定目录的文件列表。

f_list = os.listdir(路径)?#获取f_list中I的目录列表:#分隔文件名和后缀名,过滤掉工具脚本。

file _ endstr = OS . path . split ext(I)[1]#判断是否是目录。

if os.path.isdir(i):

f _ list 1 = OS . listdir(path+'/'+I)for j in f _ list 1:#过滤掉带有指定后缀endStr的文件。

if OS . path . split ext(j)[1]= = end str:#标识文件所在的目录,以便清楚。

r _ list . append(I+'/'+j)# print j . decode(" string _ escape ")

elif file_endStr == endStr:

r_list.append(i)返回r_list

我在这里发现了一个问题,就是在?os.path.isdir(i)?在2.7.11版本中,莫名其妙的返回false,需要修改如下才能正常:

if file_endStr == ' ':

i = os.path.join(path,I)?# = = = = = = = = = = = >这行是必须的。

#打印I

#确定它是否是一个目录

if os.path.isdir(i):

...

获取文件的创建时间:

需要用吗?os.time?模块的功能:

#获取文件创建时间def get_FileCreateTime(filePath):

t = os.path.getctime(filePath)?返回时间戳时间(t) #将时间戳转换为时间:1479264792到2016-16 10:53:12 ' ' def时间戳。

timeStruct = time.localtime(时间戳)?return time . strftime(' % Y-% M-% d % H:% M:% S ',timeStruct)

获取博客标题:

其实就是把后缀从目录字符串里截掉然后把最后一个截掉?/?你可以从前面的内容中得到博客的名字:

#获取文件名def getFileSimpleName(filePath ),不包含目录中的前一个路径和后缀:

name = ' '

#首先删除后缀

name = OS . path . split ext(file path)[0]?#获取最后一个斜杠位置

index = name.rfind('/')?#如果找不到,则返回-1。

if指数!= -1: ?#截取斜杠后的内容到末尾

name = name[index+1:]?#打印姓名

返回名称

获取文件所在目录的名称作为tab值:

类似于获取博客名的思路,获取最后一个斜杠位置,截掉斜杠后的内容,再获取最后一个斜杠位置。如果有,截掉斜杠后的内容就是文件所在的目录名:

#获取目录名defgettypenamebypath(file path):file tag = ' ' #获取最后一个斜杠位置index = filePath.rfind('/')#如果找不到,则返回-1if index!= -1: #截取斜杠到末尾的内容。

FileTag = filePath[:index] #切掉前面的部分。

index = file tag . rfind('/')if index!= -1:

file tag = file tag[index+1:]# print fileTag return fileTag

将内容插入文件:

调用以上方法分别得到我们想要的信息:

#指定目录路径= '。/' # Get file list files = getFileList(path,'。MD’)?

对于文件中的I:?print ' title:'+getfile simplename((I . decode(" string _ escape ")))?print ' date:'+get _ file create time((path+I . decode(" string _ escape ")))?print '标记:['+getTypeNameByPath((I . decode(" string _ escape "))+']'

接下来要做的就是按照格式将这些内容插入到文件中。当然,在插入之前,需要检查文件中是否插入过类似的内容。你可以简单的判断前40个字符串是否包含这个字符串:

''' -

标题: '''

关于显示分隔符?& lt!-更多-& gt;?插入位置的一般逻辑是:在第一个标题之后,第二个标题之前,而用Markdown语法写的博客标题用?#?最终的插入方法如下:

#将指定的数据def addheadtofile(文件路径,标题,日期,标签):file = open(文件路径,“r”)插入文件。

content = file.read()

index = content[:40]。查找(“”)

title:' ')# Add IF INDEX = =-1:print '未添加'

addContent = ''' -

标题:' ' '+标题+' ' '

日期:' ' '+日期+' ' '

标签:[' ' '+标签+''']

类别:' ' '+标签+' ' '

& ltHR/>;

'''

#检测是否插入部分显示标签。

内容=添加内容+内容

index = content . find(“”& lt;!“更多->”如果index == -1: #获取第一段的位置。

index = content . find(' ' # # # ' ')if index!= -1: #print "first ### pos = ",index

#下一个标题位置(插入第二个标题之前)

pos =内容[索引:]。查找(“”)

# ' ' ',1)如果pos!= -1:

index+= pos # print " second enter pos = ",index

content = content[:index]+' ' '

& lt!-更多-& gt;

' '+内容[索引:]

file = open(文件路径,“w”)

File.write (content) else: # print '文件头添加了' #记住关闭文件file.close()。

最后,完整的呼叫过程:

#指定目录路径= '。/' # Get file list files = getFileList(path,'。MD’)?

#在文件中为I声明一些全局变量title ='' date ='' tags = ' ':

title = getfile simplename(I . decode(" string _ escape "))

date = get _ file create time(path+I . decode(" string _ escape "))

tags = getTypeNameByPath(I . decode(" string _ escape "))print ' title:'+title print ' date:'+date print ' tags:['+tags+']'

addHeadToFile(path+I . decode(" string _ escape "),标题,日期,标签)