Python基础
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。
Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。
像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。
官方宣布,2020 年 1 月 1 日, 停止 Python 2 的更新。
Python 2.7 被确定为最后一个 Python 2.x 版本。
本文档包括:基本语法、string、re
Base
Install
已安装包
- pip3 list
- Pip3 install numpy…whl
reload
import importlib importlib.reload(usql_sys)
sys
sys.argv 是命令行参数列表,type=列表
ENV
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8' #oracle
Dev
指定编码
变量中出现非ASCII字符,则需要指定处理之编码,如:utf-8
#coding=<encoding name> OR #!/usr/bin/python3 #-*- coding: utf-8 -*-
引入路径
同目录或系统
import sys import os import ustr
当前文件下一级目录
import udef.ustr as ustr # or from udef.ustr import to_num ## 当前文件同级目录 sys.path.append("..") import udef.ustr as ustr
建目录(多级,相当于 -p)
if not os.path.exists(path_op): os.makedirs(path_op)
判断文件是否存在
os.path.exists(FN) - OR - os.path.isfile(FN) - OR - os.access(FN, os.F_OK|R_OK|W_OK|X_OK)
当前路径
os.chdir('./ppy') os.getcwd()
动态执行命令
TOPIC=b"l_serv_monitor_io" CMD="mqkc.topics[TOPIC]" mqtp = eval(CMD)
编译
DEBUG
python3 -m pdb mqlog_oc_mc3 n=10000 offset=0 b umq.py:353 设置断点 c 执行到下一个断点 l 列出附近代码
特殊字符
PA='\x04'
三目
max = a if a>b else b
lamda 表达式
uncol = str([x for x in re.split(" *, *", uncol) if x]).strip('[]') cols = re.sub('[\[\]\']', , str([x for x in re.split(" *, *", cols) if x]))
变量类型
string
split
# 将字符串按分隔符切几次,切分的最后部分为剩余全部;如:n=1时,字符串为两部分 v1 = "1010;msinfo;bidb01;10.10.137.10;/;32" key,type,name,ip,v1 = v1.split(';', 4) #也可以把拆分后的结果存到 list v1_list = v1.split(';') ## strip #移除字符串头尾指定的单字符,支持多个单字符。 str.strip([chars]) s=',hello, world.,!,' s.strip(',.!') # 'hello, world' str(e).replace('\r', ' ').replace('\n', ' ') # delete \r\n ## 重复字符 v1 = "%s," * 10 ## 子字符个数 s.count(',')
字符串方法
str.upper()
str.lower()
str.capitalize()
首个字母大写,其余小写
str.casefold()
消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。 例如,德语小写字母 'ß' 相当于 "ss"。 由于它已经是小写了,lower() 不会对 'ß' 做任何改变;而 casefold() 则会将其转换为 "ss"
str.center(width[, fillchar])
返回长度为 width 的字符串,原字符串在其正中。 使用指定的 fillchar 填充两边的空位(默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本
str.count(sub[, start[, end]])
返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 可选参数 start 与 end 会被解读为切片表示法。
If sub is empty, returns the number of empty strings between characters which is the length of the string plus one
list
v1 = ['abc', ' ', 'aa', ';', 'bb', ',', 'cc', ' ', '|', 'dd(xx).xxx', ' ', "12.12'", ' ', 'xxxx']
- 添加/删除元素
v1.append('Apple')
del v1[0]
del_last = v1.pop(-1) # 删除最后一个值
v1.remove('a') # 删除第一个匹配值
- 列表截取,list[parm1:parm2:parm3]
- parm1:开始下标,可以为空,默认为0
- parm2:结束下标,可以为空,默认为 list.size,但是不包括 list.size,左闭右开
- param3:步长,默认为1
v1[1] 第二个元素
v1[-2] 倒数第二个元素
v1[::-1] 逆序列表
v1[:-1] 除了最后一个,取全部
v1[2::-1] 从第三个元素开始到结束的逆序
包
re
re.split
import re v1="abc aa;bb,cc | dd(xx).xxx 12.12' xxxx" >>> re.split(r' ', v1) ['abc', 'aa;bb,cc', , '|', 'dd(xx).xxx', "12.12'\txxxx"] >>> re.split(r'[\s]', v1) ['abc', 'aa;bb,cc', , '|', 'dd(xx).xxx', "12.12'", 'xxxx'] >>> re.split(r'[\s;,.()]', v1) ['abc', 'aa', 'bb', 'cc', , '|', 'dd', 'xx', , 'xxx', '12', "12'", 'xxxx'] >>> re.split(r'bb,', v1) ['abc aa;', "cc | dd(xx).xxx 12.12'\txxxx"] >>> re.split(r'[,; ] *', v1) ['abc', 'aa', 'bb', 'cc', , 'dd(xx).xxx', "12.12'", 'xxxx'] >>> re.split(r'(,|;| |\|) *', v1) # 带分隔符 ['abc', ' ', 'aa', ';', 'bb', ',', 'cc', ' ', , '|', 'dd(xx).xxx', ' ', "12.12'", ' ', 'xxxx'] >>> 可以使用 [::2] 去掉分隔符
与 str.split 比较,相同部分
s1='a,b,c,d, ,,12.3' >>> re.split(',', s1) ['a', 'b', 'c', 'd', ' ', , '12.3'] >>> s1.split(',') ['a', 'b', 'c', 'd', ' ', , '12.3'] >>> s1.split('c,') ['a,b,', 'd, ,,12.3'] # string 可以指定分解的个数 >>> s1.split(',',3) ['a', 'b', 'c', 'd, ,,12.3']
正则
s2='a,{b,c,d}, ,,12.3' >>> re.split('{|}', s2) ['a,', 'b,c,d', ', ,,12.3'] >>> re.split('{|}|,', s2) ['a', , 'b', 'c', 'd', , ' ', , '12.3']
re.sub 替换
. = any char * = more
re.sub(' ', , p_str1) str1 = 'a, b , c ,d e, f1,g' re.sub(' *, *', ',', str1) s="select a,b,c,eee from tab where sfrom = 'abc'" re.sub('select.*?from', , s) # " tab where sfrom = 'abc'" # 惰性匹配 #*,+,?等都是贪婪匹配,后面加?号使其变成惰性匹配 cols = re.sub(':.*?,', ',', s1+',').strip(',') # s1=uuid:1|32|h,etl_id:2|8|r,... # 分组匹配 import re s = '110223199001011123' res = re.search('(?P<province>\d{3})(?P<city>\d{3})(?P<born_year>\d{4})(?P<bron_month>\d{2}',s) print(res.groupdict()) 此分组取出结果为: {'province': '110', 'city': '223', 'born_year': '1990', 'bron_month': '01'} # 取{}字符 re.search('\{.*\}', S1) # 替换超过五个数字 re.sub('(\d\d\d\d\d*)', '32000', str1) # str1 = 'varchar2(65536)'
Error Info
# except Exception as e: str(e).split('\n')[0] # raise raise ValueError('Error.')