Python对文本文件的简单操作(一)
工作背景
性能测试工程师,主要测试工具--loadrunner,主要是接口测试。
实现功能
loadrunner对报文格式的转换存在问题,部分报文无法转换,故使用Python编写脚本自动将soap协议报文转换为loadrunner默认的格式。
转换步骤
soap协议原报文如下:
1 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="URL"> 2 <soapenv:Header/> 3 <soapenv:Body> 4 <ser:queryRiskPolicyCaseInfo> 5 <!--Zero or more repetitions:--> 6 <arg0> 7 <!--Optional:--> 8 <clientInfo> 9 <!--Optional:--> 10 <batchNo>?</batchNo> 11 <!--Optional:--> 12 <size>?</size> 13 </clientInfo> 14 <!--Optional:--> 15 <riskPolicyCaseSubDto> 16 <!--Optional:--> 17 <riskPolicyCaseRequestInfo> 18 <!--Optional:--> 19 <companyCode>?</companyCode> 20 <!--Optional:--> 21 <currentPage>?</currentPage> 22 <!--Optional:--> 23 <districtCode>?</districtCode> 24 <!--Optional:--> 25 <districtLevel>?</districtLevel> 26 <!--Optional:--> 27 <endDate>?</endDate> 28 <!--Optional:--> 29 <pageSize>?</pageSize> 30 <!--Optional一页多少条:--> 31 <riskCode>?</riskCode> 32 <!--Optional风险等级:--> 33 <riskRuleCode>?</riskRuleCode> 34 <!--Optional:--> 35 <ruleType>?</ruleType> 36 <!--Optional:--> 37 <startDate>?</startDate> 38 </riskPolicyCaseRequestInfo> 39 </riskPolicyCaseSubDto> 40 </arg0> 41 </ser:queryRiskPolicyCaseInfo> 42 </soapenv:Body> 43 </soapenv:Envelope>
代码如下:
1 import re 2 """ 3 将soap格式的报文修改为loadrunner格式 4 """ 5 file = r"C:\\Users\\zg\\Desktop\\报文转换\\报文.txt" 6 file_out = r"C:\\Users\\zg\\Desktop\\报文转换\\转换后的报文.txt" 7 #报文头部 8 header = 'soap_request("StepName=google", \n"ExpectedResponse=AnySoap", \n'+'"URL=www.baidu.com'+'"'\ 9 +', \n"SOAPEnvelope= "\n"<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>"' 10 #报文尾部 11 last = '"Snapshot=t1.inf",\n"ResponseParam=result",\nLAST );' 12 with open(file_out,'w') as f_clear: 13 #写文件前清空文件 14 f_clear.truncate() 15 f_clear.write(header+'\n') 16 #确定line_num 17 line_num = 1 18 #确定文件的行数 19 numbers = len(open(file,'r').readlines()) 20 #编辑原报文 21 with open(file) as f_in: 22 for line in f_in.readlines(): 23 #判断是否为空行 24 if len(line.strip()) > 0: 25 # 找出每行第一个非空字符的位置(正则表达式) 26 num = re.search(r'\S', line).span()[0] 27 #判断是否为最后一行 28 if line_num < numbers: 29 # 对每行进行拼接 30 line = line[:num] + '"' + line[num:].replace('"', r'\"').rstrip() + '"' 31 line_num += 1 32 else: 33 line = line[:num] + '"' + line[num:].replace('"', r'\"').rstrip() + '"' + ',' 34 #在最后一行行尾添加逗号‘,’ 35 else: 36 line = '\r\t\n' 37 line_num += 1 38 #将修改后的内容写入新的文件 39 with open(file_out,'a') as f_out: 40 f_out.write(line + "\n") 41 #追加报文尾部 42 with open(file_out,'a') as f_out: 43 f_out.write(last)
运行代码,转换后的报文如下:
1 soap_request("StepName=google", 2 "ExpectedResponse=AnySoap", 3 "URL=www.baidu.com", 4 "SOAPEnvelope= " 5 "<?xml version=\"1.0\" encoding=\"utf-8\"?>" 6 "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"URL\">" 7 "<soapenv:Header/>" 8 "<soapenv:Body>" 9 "<ser:queryRiskPolicyCaseInfo>" 10 "<!--Zero or more repetitions:-->" 11 "<arg0>" 12 "<!--Optional:-->" 13 "<clientInfo>" 14 "<!--Optional:-->" 15 "<batchNo>?</batchNo>" 16 "<!--Optional:-->" 17 "<size>?</size>" 18 "</clientInfo>" 19 "<!--Optional:-->" 20 "<riskPolicyCaseSubDto>" 21 "<!--Optional:-->" 22 "<riskPolicyCaseRequestInfo>" 23 "<!--Optional:-->" 24 "<companyCode>?</companyCode>" 25 "<!--Optional:-->" 26 "<currentPage>?</currentPage>" 27 "<!--Optional:-->" 28 "<districtCode>?</districtCode>" 29 "<!--Optional:-->" 30 "<districtLevel>?</districtLevel>" 31 "<!--Optional:-->" 32 "<endDate>?</endDate>" 33 "<!--Optional:-->" 34 "<pageSize>?</pageSize>" 35 "<!--Optional一页多少条:-->" 36 "<riskCode>?</riskCode>" 37 "<!--Optional风险等级:-->" 38 "<riskRuleCode>?</riskRuleCode>" 39 "<!--Optional:-->" 40 "<ruleType>?</ruleType>" 41 "<!--Optional:-->" 42 "<startDate>?</startDate>" 43 "</riskPolicyCaseRequestInfo>" 44 "</riskPolicyCaseSubDto>" 45 "</arg0>" 46 "</ser:queryRiskPolicyCaseInfo>" 47 "</soapenv:Body>" 48 "</soapenv:Envelope>", 49 "Snapshot=t1.inf", 50 "ResponseParam=result", 51 LAST );
View Code
后期会使用Tkinter模块实现其图形界面化,代码中用到正则表达式模块re,以后会有专门的文章对其进行描述,本人为Python入门菜鸟,大神请绕过,不喜勿喷!
转载于:https://www.cnblogs.com/zhang-zhi/p/7646923.html
Python对文本文件的简单操作(一)相关推荐
- Neo4j离线环境搭建与基于python中py2neo的简单操作
Neo4j离线环境搭建与基于python中py2neo的简单操作 1 安装与配置 1.1 Neo4j安装 1.2 python操作环境配置 2 Neo4j操作 2.1 创建: 创建点 创建点边: 2. ...
- python创建以姓名命名的txt文件,python创建文本文件的简单方法
python open() 函数以指定模式打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. w 模式表示打开一个文件只用于写入.如果该文件已存在则打开文件,并从开头开始编辑,即原有 ...
- Python办公自动化----文本文件的读写操作
用Python进行txt和csv文件的读写操作 在Python中实现文件操作可以使用Python内置的open函数来打开文件,在使用open函数时,可以通过函数的参数指定文件名.操作模式和字符编码等信 ...
- 利用Python对文本文件进行简单的处理
在诸多软件压缩包中或是项目压缩包中都会存在一个readme.txt文件,其中的内容无非是对软件的简单介绍和注意事项.但是在该文本文件中,内容没有分段分行,是非常冗杂地混在一起.当然处理手段多种多样,而 ...
- 【python3】python实现多线程(简单操作)
大家在使用python开发或测试中,难免会用到python的多线程操作,下面我就来简单介绍一下多线程的2种基本的实现方法: [说明]: (1)在多线程中我们需要使用的第三方库是threading: ( ...
- python写字板_pywinauto简单操作写字板的例子
前段时间写了做web程序界面自动化的简单例子,今天写一下windows gui程序界面自动化测例子吧. def openwordpad(): app = application.Application ...
- python 字典的一些简单操作
from numpy.core._multiarray_umath import squared={'name':'xiaoming','age':20}# # #获取元素 print(d['name ...
- python中文件的简单操作
一.mode="r" mode="r":一次性读取文本中全部的内容,以字符串的形式返回结果 read :读取内容 readline : 读取一行 readlin ...
- mysql 空间数据操作,MySQL 空间数据 简单操作
在做的项目中需要,自己绘制区域图形,并存储起来,后面还有更新的需要,存文件不方面,想到现在数据库都支持空间数据库. 现在用的就是 MySQL ,就继续用 MySQL 来存储.管理空间数据.下面就做一些 ...
- python 基础 文本文件的操作
一 文件介绍 1.什么是文件 狭义说:文本文件:广义说:超文本文件, 图片,声音,超链接,视频. 2.文件的分类 文件大体上可以分为两类,文件文件和二进制文件. 3.文件的作用 使用文件的目的是把一 ...
最新文章
- ExtJs之gridPanel的属性表格,编辑表格,表格分页,分组等技巧
- 直播变局下百度移动生态新“野望”
- linux磁盘分区fdisk命令详解
- OpenCV实现张正友相机标定源代码
- 2021年中国现制茶饮行业洞察报告
- python matlablib安装踏坑记
- 工作两年多的一个菜鸟感想
- java flash 压缩_Java和flash通信中数据的zlib压缩与解压缩
- 快速打开计算机磁盘的软件,怎样快速启动电脑
- 一文读懂babel编译流程,再也不怕面试官的刁难了
- 【项目分析】利用J#类库解决项目中数据压缩以及解压的问题
- 深入研究:HTTP2的真正性能到底如何
- python学习Day6 元组、字典、集合set三类数据用法、深浅拷贝
- 知云文献翻译出现乱码的解决方式
- 矩阵分析及应用(1-2章)
- 重学css 0x3 CSS效果
- PTA 实验7-5 输出大写英文字母(10 分)
- 动态选择屏幕(FREE_SELECTIONS_INIT)
- CedarX中代码技术的应用借鉴 (二)多态的方式创建格式解析器
- 传奇服务器最多登录人数设置,传奇服务器中如何设置角色升级经验值数量