SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档321

  • 关于

  • 搜索

Pythonista中文教程:使用editor模块实现文件信息维护

发表于 2020-03-30 更新于 2021-10-29 分类于 计算机 , 技术 , Python 阅读次数: Valine:
本文字数: 3.4k 阅读时长 ≈ 3 分钟

前言

  通常我们在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
98
import 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
"""

脚本的使用

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

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


结语

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

Pythonista中文教程

-------- 本文结束 感谢阅读 --------
相关文章
  • Transista for iPadOS
  • 基于Pythonista和百度API的图片文本识别翻译脚本
  • Pythonista中文文档:scene
  • Pythonista中文文档:cb
  • Pythonista中文文档:contacts
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: Pythonista中文教程:使用editor模块实现文件信息维护
  • 本文作者: SiriYang
  • 创建时间: 2020年03月30日 - 11时03分
  • 修改时间: 2021年10月29日 - 18时10分
  • 本文链接: https://blog.siriyang.cn/posts/20200330115239id.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
Python Pythonista
Pythonista中文文档:appex
Pythonista中文文档:dialogs
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
321 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:48
0%