pythonista 添加模块_Pythonista中文教程:使用editor模块实现文件信息维护

前言

通常我们在Windows上编写Python代码的时候,喜欢创建一个模板来在代码头部自动生成文件的相关信息注释。虽然在Pythonista中也能创建模板,但是该模板无法动态的获取文件名称,当前时间等信息。每次通过模板创建一个新文件都要手动填上文件名、创建时间等相关信息,之后修改了代码又要手动修改更新时间就更为麻烦了,哎,别问我是怎么知道的…

不过好在Pythonista作者为我们提供了editor模块,可以对Pythonista编辑器本身进行开发,也就为我们编写一个自动化维护文件信息的脚本提供了可能。

正文

代码实现

具体详细的教程我已经通过注释写在代码中了,你只需要按照从上到下的顺序阅览即可了解:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98import os

from datetime import datetime

import editor

import console

CODING='# -*- coding:utf-8 -*-\n' # 编码,该参数将放在第一行,也可修改成别的如python版本之类的

AUTHOR="SiriYang" # 作者,使用前改成自己的名字

TIME_FORMAT="%Y-%m-%d %H:%M:%S" # 符合datetime的时间格式,可按自己喜好修改

# 统计代码文件中有效代码行数(非注释,非空行)

def unCommentLines(textlists):

f=0

count=0

for i in textlists:

i=i.strip()

if(f==0 and (i.startswith('"""') or i.startswith("'''"))):

f=1

elif(f==1 and (i.startswith('"""') or i.startswith("'''"))):

f=0

elif(f==0 and len(i)>2 and not i.startswith('#')):

count+=1

return count

def main():

path=editor.get_path() # 获取当前编辑器页面打开的代码文件路径

if(path==None): # 如果没有文件被打开就返回

console.hud_alert("没有打开的文件","error",1)

return

file=os.path.basename(path) # 从路径中解析出文件名(带后缀)

# 使用editor.open_file()在当前窗口再次打开该文件,

# 其目的是确保之前编辑的缓冲区中的内容意已保存

editor.open_file(path)

text=editor.get_text() # 获取代码文件全部文本

textlines=text.splitlines() # 将代码文本按行切片

nowtime=datetime.strftime(datetime.now(),TIME_FORMAT) # 获取当前时间,之后可能会多次使用

count=0 # 记录当前游标所指向的位置

line=0 # 记录当前游标所在行数

info=CODING # info为我们的文件信息,之后用于文本替换。先初始化为CODING。

info+='"""\n' # 加上多行注释的开头部分

if(text.startswith(info)): # 判断该文本是否已具有文件信息

for i in textlines: # 遍历所有行(其实只遍历了最开始的文件信息部分)

line+=1 # 游标行数加1

count+=len(i)+1 # 游标加上改行字符数,因为换行符在切割的时候被丢掉了,所以要手动加1

# 如果此时找到多行注释符且行数大于2,

# 则判断为注释结束标志

if(i.startswith('"""') and line>2):

#开始收尾工作,准备跳出循环

#以下判断语句主要是了兼容之前模板没有加上的条目

if(not '@updateTime:' in info): # 如果已找到的信息注释中没有更新时间则加上

info+='@updateTime: '+nowtime+'\n'

if(not '@codeLines:' in info): # 如果已找到的信息注释中没有代码统计则加上

info+='@codeLines: '+str(unCommentLines(textlines))+'\n'

info+='"""\n' # 加上多行注释的结尾

break

# 如果找到@file,则更新为新的文件名,并加入info

if(i.startswith('@file:')):

info+='@file: '+file+'\n'

continue

# 如果找到@updateTime,则更新为当前时间,并加入info

if(i.startswith('@updateTime:')):

info+='@updateTime: '+nowtime+'\n'

continue

# 如果找到@codeLines,则重新统计代码行数,并加入info

if(i.startswith('@codeLines:')):

info+='@codeLines: '+str(unCommentLines(textlines))+'\n'

continue

# 但凡找到以@开头的字段都统统加入info,用户可以针对不同文件加入不同的@字段

# 同样也保证了对于之前已存在的用户和创建时间字段不做修改

if(i.startswith('@')):

info+=i+'\n'

else: # 如果没有则重新创建,用户可根据自己需求调整编辑以下初始模板,增删或调整字段顺序

info+='@author: '+AUTHOR+'\n'

info+='@file: '+file+'\n'

info+='@createTime: '+nowtime+'\n'

info+='@updateTime: '+nowtime+'\n'

info+='@codeLines: '+str(unCommentLines(textlines))+'\n'

info+='"""\n\n' # 多加一个换行符,让有效代码与信息注释之间空一行

editor.replace_text(0,count,info) # 替换老旧的文件信息,或创建插入(此时count==0,即在开头插入)

editor.open_file(path) # 再次在当前窗口打开该文件,以保存我们之前更新的信息

if __name__ == "__main__":

main()

最终实现效果如下:

1

2

3

4

5

6

7

8# -*- coding:utf-8 -*-

"""

@author: SiriYang

@file: FileInfo.py

@createTime: 2020-03-28 00:00:05

@updateTime: 2020-03-30 11:47:42

@codeLines: 66

"""

脚本的使用

要使用以上代码我们需要将其加入编辑器右上角的工具栏,即”扳手“按钮,然后切换到想要处理的代码页面,点击工具栏快捷方式执行就行了。

1.png-wm

对于加入工具栏的快捷方式,Pythonista会在主程序中为其生成一个快捷键,只需要点击该快捷键就行执行了(估计只有前10个脚本才有快捷键,毕竟数字键就只有10个)。且工具栏中的脚本都是在后台运行,直接呈现结果,执行过程对用户是透明的,使用起来就像是系统原生的功能一样,非常舒服。当然想要使用快捷键的前提是你的iOS设备外接了物理键盘。

2.png-wm

结语

该脚本目前只按照我自己的需求开发了一些字段,其还有很大的拓展空间,用户后期可以自由发挥添加自己想要的字段进去。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值