Python列表、字典的筛选
1 | #!/usr/bin/env python |
输出:
1 | [61, -31, 2, -45, -1, 19, -41, -8, -17, 48] |
1 | #!/usr/bin/env python |
输出:
1 | [61, -31, 2, -45, -1, 19, -41, -8, -17, 48] |
公司有块业务是靠socket提供端口供给业务查询的。
之前每次测试socket发送数据都略麻烦,所以自己用python搞了一次。
根据业务之前的逻辑,检测字段包含EOF结束读取。
1 | import socket |
Python实现求第N位斐波那契数。迭代用来队列来保存,用其它也是可以的。
1 | #!/bin/env python |
结果:
1 | 2017-05-19 18:00:52.194334 |
递归效率还是比较底下,但是语法简明。
这前天walle部署出现了一些莫名其妙的问题。检测配置是通过的,但是部署的时候遇到前后置任务的时候总是报错。
开始以为是数据库问题,后来排查了,又以为是php执行函数exec被禁用的问题。但是并不是。
真是百思不得骑姐啊。
回想最近的改动,只有我安装过一个运维工具的agent,但是已经卸载了。
料想应该是修改了哪里的配置。
最后才定位到 /etc/profile
多了一条 #ulimit -n 204800
修改了文件符打开数量。最后我把它注释掉就好了。
至于为什么这个会影响到walle,还没深究,等找到原因再来补充。
今天给一台测试机配个环境,顺道记录下,一直觉得webtatic比官方源好用。但是老是容易忘记名字,这次就贴这里了。
mariadb
yum groupinstall -y mariadb mairadb-client
php5.6
Repo 源
1 | CentOS 5.X |
yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64
php-fpm
yum install php56w-fpm
nginx 1.10
yum install -y nginx1w.x86_64
nginx
/etc/nginx/nginx.conf
1 | server字段里面,要配置root项,指向你网站的根目录。 |
php-fpm
其实user和group用默认的也是没问题的。但是为了以后方便自定义点,我用了一个叫www的账户
1 | # groupadd www-data |
/etc/php-fpm.d/www.conf
1 | user=www |
为了更好的性能,建议对nginx.conf 配置一下worker的数量,php-fpm 配置一下池,常驻进程数量。
mysql 先运行mysql_secure_installation
这个脚本来改一下root密码,关闭远程连接和删除测试数据库之类的东西。
1 | # systemctl start php-fpm mariadb nginx |
Python 的异常接管和很多程序的都差不多,尤其是Pascal。
1 | ImportError:an import fails 导入失败,一般导入了无效的模块 |
异常的接管
1 | try: |
比如除以0的时候都会抛出一个ZeroDivisionError
异常。
而接管异常处理示例
1 | try: |
又或者留空,默认接管所有异常。
1 | try: |
又或者使用多个except接管多个不同类型的异常。
1 | try: |
以上只是列举了异常类型的小部分
如果想查看更多异常类型,可以导入exceptions
模块,用dir查看。如下:
1 | In [1]: import exceptions |
这个和许多语言都有点类似。一般在发生异常的时候,执行就被中断了。而有些被打开的数据有可能会被丢失。
尤其是用open打开文件的时候,很有可能导致内容丢失。所以为了让代码在出现异常的时候,一样能执行特定的代码。比如释放对象,安全关闭文件等。就有了 try ... finally
语句。
1 | try: |
比如常见安全关闭文件
1 | try: |
不过对于安全打开关闭文件,一般更推荐的做法是用with
1 | with open("test.txt","wb") as f: |
raise
有时候在处理潜在有问题的代码的时候,你希望主动引出一个异常,可以用raise
语句。
比如引出一个 ValueError
raise ValueError
raise ValueError('值错误')
assert
断言使用,可能都是用于自己调试程序的时候才会用到。
assert 1!=1
当后面表达式不为True的时候,就会引发AssertionError
错误。
需要将json的数据,按program属性的数组大小进行排序。Python实现特别轻松,主要在交换值方面轻松,以前用Delphi代码量起码是这个两倍。
代码如下:
1 | #coding:utf-8 |
要实现对括号对的匹配。
假如不能双双配对,就是不合适的。举个例子
1 | 正确 |
思路就是用一个栈存储匹配到的左括号,匹配到右括号的话,就和栈顶的数据对比。因为两个括号的ASCII码,一般右括号总比左括号大1或者2.通过判断差值是否在这个区间,基本可以确定。匹配到一对括号,便消除一个。到最后如果栈为空,就是合格的。反之,不为空就是不合格的。
实现代码如下:
1 | #!/usr/bin/python |
结果如下
1 | check_format('sd{sfsfs}[(s)]') |
很多数据都做了备份,而且全都用脚本完成。并定时下载一份回我们本地,等于多多点异地备份了,避免被一锅端了的情况。
像代码,这个是分发的,而且开发人手一份,这个就不备份了。用户静态数据也都定时做了rsync同步备份,压缩保存。
连测试环境的数据库都做了自动的MySQL逻辑备份。唯独线上环境,存在RDS中的MySQL数据库,虽然有RDS定时备份实例,但是不经常上去下载一份保存回本地你是不得安心的。
这万一被盗号了呢。。。岂不是辛辛苦苦几十年,一删回到解放前。
本来是可以用mysqldump -h 远程IP
这样备份的。但是RDS可能是防止脱裤,搞了限制。所以,往日都是我自己上阿里云官网,手动点击下载备份。
为了减少这一部分的重复劳动,我决定用阿里云的SDK搞一个自动下载实例。
以为会遇到很多麻烦,没想到SDK封装得还不错,使用异常简单。
步骤分为如下几步
安装阿里云API封装的Python SDK
里面几乎有阿里云所有产品的SDK,这给我们定制自己的工具提供了很大的便利。
这里我们要用的是RDS相关的功能,所以 sudo pip install aliyun-python-sdk-rds
就行了。
申请访问API需要用的Access Key。
最好先新建RAM账号,再申请AK。
编码
整个备份逻辑很简单,就是查看指定日期区间备份列表,获取备份信息。然后下载备份。
主要用到SDK DescribeBackupsRequest
这个类。
代码如下:
1 | from aliyunsdkcore import client |
至此,加入crontab,备份基本全自动了。
有这么一个需求,需要根据svn生成的版本之间差异的文件列表,生成一个treeview。
数据样本如下:
1 | $defaultStr = [ |
思路如下,先根据 /
符号拆分路径成数组,拼凑tree数组。最后根据tree数组递归生成json数组。
生成数组
1 | $tree=array(); |
生成类似如下的数组
1 |
|
递归生成树
1 | //递归生成树 |
生成最终符合bootstrap treeview的格式
1 | [ |