2020年09月15日-项目开发-python二次处理代码文件
Caterpillar通过将BPMN生成为solidity代码后, 我需要对solidity代码做二次处理,即在其中的特定函数中插入event类型,以便去做事件监听.
最终生成的不仅包括solidity的事件部分,还包括了web3js的事件监听模块.
第一个问题是在solidity程序中,找到特定的某一行,然后在该行后再插入一行,如何办到?
这里用一个solidity程序做例子.
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storedData; // 声明一个类型为 uint (256位无符号整数)的状态变量,叫做 storedData
function set(uint x) public {
storedData = x; // 状态变量可以直接访问,不需要使用 this. 或者 self. 这样的前缀
}
function get() public view returns (uint) {
return storedData;
}
}
在执行get()函数所在行的下一行插入一条语句,如何办到?
思路:
1.用r+方式打开文本文件,
2. for line in f # 遍历每一行
3. if "xxx" in line #如果包含get()的字符串在该行中,则符合判断条件
4. 在该行后加入一行所需字符串, 使用字符串拼接。比如 line = line + " \n xxxxx",便可插入一行。
第二个问题:
如果给你的sol代码全部被写成了一行,且换行符全部用\n
字符串表示,要如何进行插入呢?
确实,Caterpillar生成的solidity代码原始格式就是一个字符串并且包含了\n
字符串. 因此首先要将\n
字符串替换为转义字符串
然后再使用上面的插入指令的方法. 最后再将格式重新变为包含\n
子串的字符串.
一些基础知识
r+方法是可读可写,
a方法是追加, 一般生成新的文件,用a模式(add)。
还有哪些常用模式?
python3打开文件
python2中用unicode方式格式字符串的方式是unicode("sss","utf-8"),
但是在python3中已经弃用,
NameError: name 'unicode' is not defined # python3中unicode()已经弃用而只使用str()了。
参考资料
python做编译器 https://www.cnblogs.com/lrysjtu/p/6256493.html
python替换所有符合要求的字符串
第一种方法是python的字符串替换函数replace.
a = "i love love love you"
newstr = a.replace("love", "hate")
替换之后,所有的love都会变为hate,因此这是全部替换。
replace函数并不总是成功。
https://www.jb51.net/article/164028.html
replace第三个参数是次数,如果是缺省,则是替换所有。
第二种方法是正则表达式,python正则表达式标准库re.
用法:
import re
a = 'i love love love you'
regex = re.compile('love') # 写入正则表达式
newstr = regex.sub('hate', a) #sub是正则替换方法,通过正则表达式匹配到字符串进行替换,第二个参数是原字符串
假设有字符串 r"aasdfasef\nsfewf\n",现在要将字符串\n处理为转义字符\n,并且在处理完成后在某一行插入一行命令。
使用solidity代码处理。 将所有的\\n替换为\n,然后再将solidity的事件桩插入,之后再将\\n变回\n.
使用正则表示式的方法,用\n替换\\n的方法行不通。原因是没有正确识别正则表示式里面的'\'。最后发现是没有在 '\\n'前面加r,即 r'\\n'
其实还可以通过用python字符串切分的方式,先将该字符串按照\\n切分.然后再逐行输出。但是效率太低下了。
python字符串前加r的含义:
将\变为普通字符而不是转义符号。在python3中,字符串即使是\\n
也仍然无法解析,而最好在字符串之前加上r,表明\不是转义字符。
r的作用就是去除转义字符,将转义字符变为普通字符.
python正则表示详解https://www.jb51.net/article/166072.html
关于python正则表达式,还有哪些使用方法?
2020年09月15日-项目开发-python二次处理代码文件的更多相关文章
- 【Python笔记】2020年7月30日练习【python用input函数输入一个列表】
练习课题链接:廖雪峰-Python教程-高级特性-迭代 学习记录: 1.Python当中类似于 三目运算符 的应用 2.Python用input函数输入一个列表 代码实例:对用户输入的一组数字转化成l ...
- 微信机器人项目开发--python
1.外网穿透工具下载与注册[http://ngrok.ciqiuwl.cn/] 2.公众号审请 3.代码编写 糗事百科接口 # _*_ coding:utf-8 _*_ import requests ...
- JZOJ8月15日提高组反思——2020年暑假终结篇
JZOJ8月15日提高组反思--2020年暑假终结篇 T1 仙人掌最短路 抱歉我只会最短路 仙人掌是啥? 听说是缩点+\(LCA\) 最短路30 T2 直接暴力计算 正解\(DP\) \(amazin ...
- 9月15日,YTFCloud,创业圈的技术新宠
成都创业圈近期什么最热? 资本复苏?这本来就是高低起伏规律而已,再说动辄千万的大手笔,对于创业新人.新团队来说太遥远,早期根本无法变现,而资金紧张.项目开发费用超标.没有技术大牛保障等尖锐现实问题能否 ...
- .NET编程周记第3期-2020年1月19日
整理了2020年1月19日这周阅读的几篇有趣的和.NET开发相关的文章.在这里和大家分享. 0x00 Introducing Nullable Reference Types in C# 如标题所示, ...
- MIP 技术交流分享(3月15日)
3月15日下午,MIP 团队工程师与58赶集的 Web 前端工程师进行了一次面对面的技术交流. 在这次交流中,MIP 工程师主要分享了 MIP 技术原理,MIP 加速原理,以及 MIP 为开发者提供的 ...
- 2016年3月15日Android实习日记
1.解决了ScrollView滑动冲突问题. 2.设置好了“查看详解”与“题目编号”的部分. 3.完成了app启动图片的设置,并在启动的过程中开辟新的线程连接服务器并开启监听数据. 别忘了注册启动Ac ...
- 10月15日 | 云栖大会“淘宝移动技术实践&开放论坛”来了!
参会报名链接:http://baichuan.taobao.com/marketing/yunqi#?baichuan_channel=cnblogs 顺应移动互联网消费升级趋势, 淘宝作为移动领域的 ...
- 优步UBER司机全国各地奖励政策汇总 (2月15日-2月21日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
随机推荐
- linux grep命令使用详解
grep是我们最常用的命令之一,但是正真用的熟的不多,把基础命令记牢固,能帮我们节约很多时间 grep的option -A 1 表示找到所有匹配行,并显示所有匹配行后的一行 在错误日志查找时还是很有用 ...
- GoLang设计模式02 - 工厂模式
工厂模式是一种创建型模式,也是最常用的设计模式之一.调用方通过工厂产出并获取对象,可以不必关注对象创建的细节和构建逻辑. 在工厂模式下,调用方只和工厂进行交互,并告诉工厂具体获取哪种类型的对象.工厂负 ...
- Python网编之简单的聊天小程序
服务端: import socket sock = socket.socket() sock.bind(("127.0.0.1",8899)) sock.listen(5) whi ...
- shp平滑处理
在做图像数据处理时,经常会有栅格数据转矢量数据的操作,转换后的矢量文件会存在锯齿状边缘,不太美观,因此常常需要对矢量(shp)文件做平滑处理. 1 利用arcgis实现shp的平滑和简化 ArcToo ...
- NOIP模拟26「神炎皇·降雷皇·幻魔皇」
T1:神炎皇 又是数学题,气死,根本不会. 首先考虑式子\(a+b=ab\),我们取\(a\)与\(b\)的\(gcd\):\(d\),那么式子就可以改写成: \[(a'+b')*d=a'b' ...
- Winform EF CodeFist方式连接数据库
直接生成ado.net 实体数据模型挺方便的,但只有一步步的手写代码才能更好的理解EF,在学习asp.net core过程中手写代码已经明白了怎么回事,但实现过程有些麻烦不知道如何记录,但Winfor ...
- 【第十二篇】- Git 服务器搭建之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 服务器搭建 上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,2019 年开始 Github 私有存储库也可以无限制使用. 这当然我们也可以自己搭建一台 Git 服 ...
- 加入Erlang社区-指引
国内暂且没有发现较活跃.人气较高的论坛或者社区,偶然发现Erlang官网的Community页面描述了一个Slack交流平台,里面有众多异国他乡的大佬,感兴趣的.有技术疑问的都可以加入看看. 加入教程 ...
- vue-cli3项目中使用vue-ueditor-wrap
Vue + UEditor + v-model 双向绑定 一.安装 1 npm i vue-ueditor-wrap 2 # 或者 3 yarn add vue-ueditor-wrap 二.下载文件 ...
- 【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
问题描述 在APIM中配置对传入的Token进行预验证,确保传入后端被保护的API的Authorization信息正确有效,可以使用validate-jwt策略.validate-jwt 策略强制要求 ...