• 人生如棋,落子便无悔
  • 天生带来允许,文化造成封闭
  • 话说出口前,你是它的主人,说出口之后,就是它的奴隶
  • 许多今日之心心念念,无非是来年之付诸一笑。
  • 愿你在所得少于付出时,不会终日愤愤;愿你在多得超过付出时,不必终日惶恐。
  • 与人争,无论时力还是理,终有不足处、输人处,一生一世都难得圆满。
  • 天下风俗,各有其理。

Python基础练习+实践代码

Python中的代码都是在3.6+上实现的,代码基础部分来自《Python编程快速上手 让繁琐工作自动化》和《learning python》,实践部分是根据工作在特定环境下需要写的。

Python 日志模块

logging in pythonLogging是程序员非常有用的工具,它可以帮助你理解程序运行的流程,也可以存储信息,如:user信息或访问者的IP地址等。如果一个错误发生,它可以提供比堆栈追踪更多的信息,告诉你程序在到达错误行代码前程序的状态。在对的位置记录有用的数据,你不仅可以更容易debug errrors,还可以分析程序的性能问题。python的标准库提供了logging系统,所以可以在程序中快速使用logging。python中logging模块python中日志记录模块是一个易于使用且功能强大......

Gunicorn Flask中使用项目名或给URL加固定前缀

Flask中URL地址匹配是通过装饰器完成:@app.route('/')现在需要给所有URL加上项目名称或前缀:@app.route('/project') # or @app.route('/prefix/abc')将项目名称或前缀放在app全局变量中,每个URL都拼接当然可以,但有更方便的方式:SCRIPT_NAME="/xs" gunicorn -w 1 -b 127.0.0.1:8080 app:appSCRIPT_NAME是gunicorn支持的环境变量,将Flask项目部署在gunicor......

练习:从一组Zip Codes码中匹配指定Zip Code码

说明Zip Code码是5位数字编码需求从下面10个Zip codes中获取以44开头的Zip Code码。03824531449411615213441829505344272752010217443235注意2445644132上面是2个Zip Code码:24456 和 44132。所以匹配结果是 44132。44564是错误匹配技巧保证Zip Code都是5的倍数程序def main():     # 44开头的编码(ZIP Codes是5位数编码)   &nbsp......

匹配邮箱和网站地址并添加锚点

下面程序可以批量为文件中邮箱地址和网站地址添加锚点,方便使用URL访问。def main():     s = 'This is my email: zhanheng@gmail.com'     pattern = re.compile(r'\b(\w+@\w+\.(?:com|org|net))\b')     m = re.findall(pattern, s)     print(m)   &nb......

环视匹配的实例程序补充

下面是对上一章环视匹配书面数字程序的补充。import re def main(): s1 = 'The population of 1234567890 is growing' pattern = r'(?<=\d)(?=(\d{3})+\b)' ns = re.sub(pattern, ',', s1) print(ns) s2 = 'The population of 1234567890s is growing' pat......

正则表达式系列(六):环视匹配 - 只匹配位置,不匹配元素

环视匹配只匹配位置,不匹配元素。只匹配位置,不匹配元素?什么意思呢?比如:s = "1abc"\d可以匹配元素1。而现在我想匹配元素1和元素a之间的位置。这就是环视的作用。数字书面写法接下来看个例子:我们有时会将数字书写成带,号的表达形式。数字:123456789书面写法:123,456,789很明显可以看出在两个位置添加了,号。我们要从一个字符串中找到位置,环视就派上用场了。现在确定,要实现这个功能就是在找到正确的位置,然后用,号替换。环视正则表示先看下环视的正则表达式。环视的用法很固定,就四种方式:?=......

将Oracle表数据导到MySQL工具

项目的数据库是Oracle11g,现在需要去Oracle转到MySQL。测试了好几个工具,下面这个工具是可以直接一次性成功的。SQLines Data配置项:注意:这个工具只能导入表结构和表数据,触发器和视图是不能导入的,需要自己手动转换。......

正则表达式系列(五):匹配正确的时间

匹配时间并不麻烦,但要匹配正确的时间,过滤掉不正确的时间,就需要更复杂的表达式。s1 = '9:17 am'   # yes s2 = '12:30 pm'  # yes s3 = '99:99 pm'  # no这三个时间,第一个和第二个是合法时间。第三个不是合法时间,使用通用匹配也就无法过滤掉。pattern = re.compile(r'^\d{1,2}:\d{1,2}\s+[a|p]m$')要想达到我们想要的结果,就应该继续将规则细化,分段处理。这也是一种......

正则表达式系列(四):反向分组

准备说明1.实例中正则表达式来源于《精通正则表达式》一书2.正则表达式实现方式为Python3.7反向分组反向分组是匹配在正则表达式中分组的内容,用\number表示,number从1开始,等同于调用group(number)的值, 在匹配标签内容中特别有用。import re def main():     s = 'this <I>short</I>.'     pattern = re.compile(r'<(\w+)......

使用simditor内置上传功能获取回调信息

最近web项目涉及到编辑器这一款,在网上找了几款,选中了simditor,因为它小巧轻便,也能满足需求。simditor编辑器内是可以上传图片的,并且回调信息都能获取到。但现在我需要在编辑器外上传图片,添加个封面。最简单的方式当然是直接使用上传插件来完成。但想到simditor是可以上传图片的,那么肯定内置了上传的功能,而且simditor上传图片的接收和返回方法我都已经写好了,使用simditor内置的上传图片方法,后台都不用改了。使用内置的上传方法非常简单editor.uploader.upload($......
1 2 3 ... 13