python


常用语句

调试

  1. python -m pdb your.py 进入调试模式
  2. 设置一个断点 仅在进入断点时进入调试模式
    import pdb
    pdb.set_trace() #这句放在要断点的地方
    
  3. 更多调试方法: https://www.zhihu.com/question/21572891

获取generator(yield)的大小

len(tuple(generator))

兼容py2和py3

  1. 先用sys.version判断版本
    if sys.version > '3':
        PY3 = True
    else:
        PY3 = False
    
  2. 根据版本调用不同的模块
    if PY3:
        import subprocess as commands
    else:
        import commands
    

python2下的mkdir -p

#递归创建目录函数 python2真烦
def mkdir_p(path):
    try:
        os.makedirs(path)
    except OSError as exc:  # Python >2.5
        if exc.errno == errno.EEXIST and os.path.isdir(path):
            pass
        else:
            raise

python2下的带encoding的open

#带encoding的open 为了匹配python2
if sys.version_info[0] > 2:
    # py3k
    pass
else:
    # py2
    import codecs
    import warnings
    def open(file, mode='r', buffering=-1, encoding=None,
             errors=None, newline=None, closefd=True, opener=None):
        if newline is not None:
            warnings.warn('newline is not supported in py2')
        if not closefd:
            warnings.warn('closefd is not supported in py2')
        if opener is not None:
            warnings.warn('opener is not supported in py2')
        return codecs.open(filename=file, mode=mode, encoding=encoding,
                    errors=errors, buffering=buffering)

用法:
open(xmlpath, "rt", encoding='utf-8', errors = 'strict')

二维数组

xml字符转义

def toxml(s):
    """ 将非法xml字符替换为实体引用 """

    s = s.replace('<','&lt;')
    s = s.replace('>','&gt;')
    s = s.replace('&','&amp;')
    s = s.replace('\'','&apos;')
    s = s.replace('"','&quot;')
    s = s.replace(' ','(&#x20;)')
    return s