Python基础:修订间差异
无编辑摘要 |
|||
第128行: | 第128行: | ||
>>> re.split(r'bb,', v1) | >>> re.split(r'bb,', v1) | ||
['abc aa;', "cc | dd(xx).xxx 12.12'\txxxx"] | ['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 比较,相同部分===== | =====与 str.split 比较,相同部分===== | ||
s1='a,b,c,d, ,,12.3' | s1='a,b,c,d, ,,12.3' |
2023年3月14日 (二) 20:34的版本
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
INFO
已安装包
- pip3 list
- Pip3 install numpy…whl
指定编码
变量中出现非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
reload
import importlib importlib.reload(usql_sys)
建目录(多级,相当于 -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'
list
- 下标从零开始 - print(v1_list[0])
- length - print(len(v1_list))
三目
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]))
sys
sys.argv 是命令行参数列表,type=列表
ENV
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8' #oracle
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
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.')