首页 > 编程知识 正文

python写UI自动化脚本,python在工业自动化的应用

时间:2023-05-05 15:42:16 阅读:161056 作者:4285

引言:在开发过程中,需要创建自动化的工具,包括:

Windows下的BATCH (批处理) Linux下的shell等,但是在开发跨平台时,为每个平台开发一组具有相同功能的自动化脚本显然不是最好的选择,而是跨平台通用的

Python环境安装:1.资源下载:直接将安装软件包下载到Python官方网站。 有2.x和3.x两个分支,两者有很大的区别。 当然,现在流行的是2.7.x系列。 在这里直接下载本系列的最新版本python-2.7

2.安装步骤:过程非常简单,双击打开安装软件包,然后继续Next直到安装完成。 请记住记录安装目录,以便稍后在配置系统环境时使用。

3.环境配置:打开计算机-属性-高级系统设置-环境变量.然后在系统变量中创建新条目并按如下方式设置参数:

变量名: PYTHON_HOME变量值: D:DevelopePython2.7然后编辑系统变量的Path变量的参数,并在变量值末尾; %PYTHON_HOME%; 并保存您所做的编辑。 然后打开命令行窗口,询问配置是否成功。

C :usershasee-pcpython-- version python 2.7.13或更高版本表明环境变量配置已完成。

有两种方法可以执行3358www.Sina.com/Python代码块。 一种是在命令行窗口中直接输入python命令进入交互式编程窗口,然后直接输入代码。 键盘Enter的执行结果如下所示。

c :usershasee-pcpythonpython2.7. 13 (v 2.7.1: a 06454 B1 AFA 1、dec 172016、20:42336059 (mscv.1500033: a “credits ' or ' license ' for more information.print ' hi、linsh'hi和linsh也可以编写. py脚本来编辑脚本的内容,例如:

# test.pyprint 'hi,linsh '然后在命令行中,转到脚本所在的目录并运行该脚本。 可以使用以下任一方法执行:

d :developepythontest.pyhi,Lins HD :developepythonprojectstest.pyhi,linsh #是单一注释

4.运行 Python:这里不太说明详细的语法。 只简单说明必要的基础语法。 更详细的是【Python语言参考】:

Python 基础语法:和其他编程语言一样,Python的所有标识符可以包含英语、数字和下划线(_ ),但不能以数字开头。 以下划线开始的表示特别的意思。 以单下划线_开头表示不能从外部类直接访问的类属性,并使用_foo; 下划线__的开头表示类的专用成员,就像许多语言的private权限关键字一样。 例如,__foo; 双下划线开头和结尾表示Python的特殊方法特定的标识符。 例如,__init__ ()表示类的构造函数。1.特殊标识符:Python与其他语言最大的不同在于http://www.Sina.com/com/Lua,而不是用诸如{}或Lua之类的关键字包装代码块来管理类、函数或逻辑判断

缩进空格数(键盘空格数)是可变的,但所有代码块语句都必须包含相同的缩进空格数。 例如:

if true : print ' true ' else : print ' false '通常将编程工具的单个制表符的距离设置为2.缩进和代码块:距离,作为一级缩进的空白数。

缩进Python有五种标准的数据类型。

Numbers (数字) String (字符串) List )列表) Tuple )元组) Dictionary )词典)但是,定义变量时不需要声明变量类型。 变量必须在使用前赋值。 在这种情况下,解释器根据赋值类型为此变量分配内存空间并创建变量。 只是声明但不赋值的变量。例如:

除了number=2 #整数类型percent=100.0#浮点类型name='linsh'#字符串外,还可以同时为多个变量赋值。

number,percent,name=2,100.0,' linsh' 4 个空格

函数的使用一方面是为了提高代码的重用性,另一方面又可以增强代码的可读性和模块化,下面是 Python 定义函数的格式:

def funcName(param1,param2,...):...

以关键字 def 来声明一个函数,紧跟着是函数名(函数标识符),然后是 () 包围起来的传入参数表,可以是 0 个参数,也可以是多个参数,然后用 : 号开始函数内容的开始。例如:

# test.py# # -*- coding: utf-8 -*-# 方法定义def TestFunc1():print "test1"def TestFunc2(num): print "test2: num = ",num #str 和 int 类型拼接 # 方法调用TestFunc1()TestFunc2(66)

执行结果:

D:DevelopePythonProjects>test.pytest1test2: num = 66 编写工具: 1.设计目标:

首先说一下我要工具的功能:

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

2.使用场景:

设计这样的工具起因是我最近在将之前 CSDN 中的博客搬运到自己的 Hexo 博客空间上,了解的应该知道,假如都是 Markdown 编写的话,搬运的时候只需要在文件头部加上如下的一串额外的内容:

---title: 博客标题date: 博客创建时间(例如:2016-09-03 17:15:22)tags: 标签(如:[Hexo,Next],多个的话用,号隔开)categories: 分类(如:Web)--- 标题 title 直接使用文件名称去掉 .md 后缀即可;时间 date 需要通过文件库获取文件的创建时间;标签 tags 和分类 categories ,由于我的文件会根据分类放入不同的子目录下,所以直接获取当前文件所在目录的名称即可。

此外,为了在博客首页只展示部分内容,而不是展开博客的完整内容,还需要在博客中恰当的位置插入这个标签:<!--more--> ,通常加载第一段内容结束的位置。

3.实现代码:

根据上面的思路,我们在 source/_posts 目录下创建一个工具脚本,起名为 SuitFileToHexo.py ,然后依次完成以下步骤:

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

#!/usr/有魅力的巨人/env python# -*- coding: utf-8 -*-

引入的模块:

在脚本开始的地方,最先需要做的事情就是把需要用到的模块都先引入进来,大致分析一下我们这个功能需要用到的模块:

import os.path,time

遍历当前目录下所有 .md 文件列表:

这就需要使用到 Python 的文件目录操作模块 os.path ,使用 os.listdir 获取目录列表,然后通过 os.path.splitext 分割文件名称和后缀名,从而筛选合格的文件:

# 获取指定目录指定后缀名的文件列表def getFileList(path,endStr):'''获取指定目录下,指定后缀的文件列表'''r_list = []f_list = os.listdir(path)#获取目录列表for i in f_list:# 分离文件名和后缀名,过滤掉工具脚本file_endStr = os.path.splitext(i)[1]# 判断是否是目录if os.path.isdir(i):f_list1 = os.listdir(path+'/'+i)for j in f_list1:# 过滤出指定后缀 endStr 后缀的文件if os.path.splitext(j)[1] == endStr:# 为了清晰目录把文件所在目录也标识出来r_list.append(i+'/'+j)# print j.decode("string_escape")elif file_endStr == endStr:r_list.append(i)return r_list

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

if file_endStr == '': i = os.path.join(path, i) #=================〉这一行很必要 # print i # 判断是否是目录 if os.path.isdir(i): ...

获取文件的创建时间:

需要使用到 os.time 模块的功能:

# 获取文件创建时间def get_FileCreateTime(filePath): t = os.path.getctime(filePath) return TimeStampToTime(t)# 把时间戳转化为时间: 1479264792 to 2016-11-16 10:53:12'''def TimeStampToTime(timestamp): timeStruct = time.localtime(timestamp) return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)

获取博客标题:

其实就是从目录字符串中截掉后缀名,再截掉最后一个 / 之前的内容即可得到博客名称:

# 获取目录中去掉前面路径和后缀的文件名字def getFileSimpleName(filePath): name = '' # 先去掉后缀 name = os.path.splitext(filePath)[0] # 获取最后一个斜杠位置 index = name.rfind('/') # 找不到则返回 -1 if index != -1: # 截取斜杠后面到结尾内容 name = name[index+1:] # print name return name

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

与获取博客名称思路略有相似,获取最后一个斜杠位置,截掉斜杠之后的内容,在获取一个最后一个斜杠位置,假如有则截取斜杠之后的内容即是文件所在目录的名称:

# 获得分类文件目录名称def getTypeNameByPath(filePath):fileTag = ''# 获取最后一个斜杠位置index = filePath.rfind('/')# 找不到则返回 -1if index != -1:# 截取斜杠后面到结尾内容fileTag = filePath[:index]# 截掉前面部分index = fileTag.rfind('/')if index != -1:fileTag = fileTag[index+1:]# print fileTagreturn fileTag

向文件中插入内容:

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

# 指定目录path = './'# 得到文件列表files = getFileList(path,'.md')for i in files: print 'title: '+getFileSimpleName((i.decode("string_escape"))) print 'date: '+get_FileCreateTime((path+i.decode("string_escape"))) print 'tags: ['+getTypeNameByPath((i.decode("string_escape")))+']'

接下来要做的就是把这些内容按照格式插入到文件中去,当然插入之前需要先检查文件中是否已经插入过类似的内容了,可以简单地通过检查开头 40 个字符串中是否包含这个字符串来判别:

‘’’—
title: ‘’’

关于展示分隔符 ``<!--more-->`` 插入的位置,大致逻辑是:第一个标题后面,而且刚好插入在第二个标题之前即可,而使用 Markdown 语法撰写的博客标题使用 ``#`` 来表示的,最终的插入方法如下:```python# 向文件中插入指定数据def addHeadToFile(filePath,title,date,tags):file = open(filePath,"r")content = file.read()index = content[:40].find('''---title:''')# 添加if index == -1:print 'Undadded'addContent = '''---title: '''+title+'''date: '''+date+'''tags: ['''+tags+''']categories: '''+tags+'''---'''# 检测是否插入部分显示标签content = addContent + contentindex = content.find('''<!--more--> ''')if index == -1:# 获取第一段的位置index = content.find('''### ''')if index != -1:#print "first ### pos = ",index# 下一个标题位置(在第二个标题之前插入即可)pos = content[index:].find('''#''',1)if pos != -1:index += pos#print "second enter pos = ",indexcontent = content[:index]+'''<!--more-->'''+content[index:]file = open(filePath,"w")file.write(content)else:#print 'file head had added'# 记得要关闭文件file.close()

最后完整的调用过程:

# 指定目录path = './'# 得到文件列表files = getFileList(path,'.md')# 声明一些全局变量title = ''date = ''tags = ''for i in files: title = getFileSimpleName(i.decode("string_escape")) date = get_FileCreateTime(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"),title,date,tags)

其他:

如果你跟我一样出现了打印中文文件名变成诸如: “BATCHxc5xfaxb4xa6xc0xedxbcxf2xbcxc7.md” 这种格式的话,可以参考:Linux 下Python2.7解决list打印中文字符问题

参考资料: Python注释Python 基础语法Python 函数Python 入门指南python 获取文件大小,创建时间和访问时间python插入内容到指定文件的位置os.path.isdir() 判断文件夹却返回false

微信公众号「何乐不为呢」,一个码农的技术笔记和唠叨。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。