记录

python reload

作用:
对已经加载的模块进行重新加载,一般用于原模块有变化等特殊情况,reload前该模块必须已经import过。

说明:
reload会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块;reload后还是用原来的内存地址;不能支持from。。import。。格式的模块进行重新加载。

>>> import sys
>>> sys.setdefaultencoding('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'setdefaultencoding'
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf8')

上面第一次的测试会失败,那么为什么要在调用setdefaultencoding时必须要先reload一次sys模块呢?因为这里的import语句其实并不是sys的第一次导入语句,也就是说这里其实可能是第二、三次进行sys模块的import,这里只是一个对sys的引用,只能reload才能进行重新加载;那么为什么要重新加载,而直接引用过来则不能调用该函数呢?因为setdefaultencoding函数在被系统调用后被删除了,所以通过import引用进来时其实已经没有了,所以必须reload一次sys模块,这样setdefaultencoding才会为可用,才能在代码里修改解释器当前的字符编码。试试下面的代码:

>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf8')
>>> del sys.setdefaultencoding
>>> sys.setdefaultencoding('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'setdefaultencoding'
>>> 

那么到底是谁在之前就导入sys并且调用了setdefaultencoding函数呢?答案就在python安装目录的Lib文件夹下,有一个叫site.py的文件【python2.6】,在里面可以找到main() –> setencoding()–>sys.setdefaultencoding(encoding),因为这个site.py每次启动python解释器时会自动加载,所以main函数每次都会被执行,setdefaultencoding函数一出来就已经被删除了。

/usr/lib64/python2.7/site.py

这里写图片描述


python startswith

说明:
Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。

在下面的代码中可以看到,我当前的django版本为1.10.5,当我从1.10及1.10.5开头检查字符串,返回的值为True,从1.11开头检查字符串,返回值为False。

>>> import django
>>> django.get_version()
'1.10.5'
>>> django.get_version().startswith('1.10')
True
>>> django.get_version().startswith('1.10.5')
True
>>> django.get_version().startswith('1.11')
False

python split

说明:
Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串

从下面的代码中可以看到,我通过os.environ来获取ssh客户端的环境变量,split默认将空格作为分隔符;将下列信息分为ip,remote port及local port,接着我通过index来获取每条信息。

>>> import os
>>> os.environ['SSH_CLIENT'].split()
['192.168.141.1', '54821', '22']
>>> os.environ['SSH_CLIENT'].split()[0]
'192.168.141.1'
>>> os.environ['SSH_CLIENT'].split()[1]
'54821'
>>> os.environ['SSH_CLIENT'].split()[2]
'22'

python strip

说明:
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)。

下面的代码中一开始通过read()得到 ()和\n,但需求只是需要里面的IP地址,所以通过strip将\n和()进行移除

>>> import os
>>> os.popen("who -m | awk '{print $NF}'").read()
'(192.168.141.1)\n'
>>> os.popen("who -m | awk '{print $NF}'").read().strip('()\n')
'192.168.141.1'

python re.sub

说明:
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

在下面的代码中,通过re.sub进行匹配及替换,将phone变量中的所有的a-z,A-Z,@,#,$替换为空。

>>> phone = '@[1A10|#119|AAA120]$'
>>> re.sub(r'[a-zA-Z@#$]', '', phone)
'[110|119|120]'

python 输出字符颜色函数

下面的代码用来输出不同颜色的字符,color_print 中定义了三个参数,分别为msg,color=’red’,exits=False;其中,msg就是要输出的字符串,color则是定义具体颜色,如果不定义,则默认为red,exists则是为了下面的判断。

msg = color_msg.get(color) % msg 该条信息中,color_msg.get(color) 用来获取具体的颜色的value,然后% msg将替换value中的%s,替换完成之后value的值也就是
\033[1;31m msg_info \033[0m。当执行函数后,打印出的字符颜色就是red,当然还可以自定义color=’[red|green|yellow]’

#!/usr/bin/python
# -*- coding:utf-8 -*-

def color_print(msg, color='red', exits=False):
    """
    Print colorful string.
    颜色打印字符或者退出
    """
    color_msg = {'blue': '\033[1;36m%s\033[0m',
                 'green': '\033[1;32m%s\033[0m',
                 'yellow': '\033[1;33m%s\033[0m',
                 'red': '\033[1;31m%s\033[0m',
                 'title': '\033[30;42m%s\033[0m',
                 'info': '\033[32m%s\033[0m'}
    msg = color_msg.get(color) % msg
    print msg
    if exits:
        time.sleep(2)
        sys.exit()
    return msg


color_print('hello')

颜色输出如下:

color_print('hello')
color_print('hello', color='green')
color_print('hello', color='blue')

这里写图片描述

这里写图片描述

这里写图片描述


python compile

说明:
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

下面的代码中,Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

一个简单的例子,寻找一个字符串中所有的英文字符:

>>> pattern = re.compile('[a-zA-Z]')
>>> result = pattern.findall('fwafwai@#%^%$')
>>> print result
['f', 'w', 'a', 'f', 'w', 'a', 'i']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值