Python基础:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
第11行: 第11行:
本文档包括:基本语法、string、re
本文档包括:基本语法、string、re


====INFO====
=== Base ===
 
====Install====
已安装包
已安装包
*pip3 list
*pip3 list
第21行: 第23行:
  #!/usr/bin/python3
  #!/usr/bin/python3
  #-*- coding: utf-8 -*-
  #-*- coding: utf-8 -*-
====reload====
import importlib importlib.reload(usql_sys)
====sys====
sys.argv 是命令行参数列表,type=列表
====ENV====
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8'            #oracle
====引入路径====
====引入路径====
同目录或系统
同目录或系统
第32行: 第40行:
  sys.path.append("..")
  sys.path.append("..")
  import udef.ustr as ustr
  import udef.ustr as ustr
====reload====
import importlib importlib.reload(usql_sys)
====建目录(多级,相当于 -p)====
====建目录(多级,相当于 -p)====
  if not os.path.exists(path_op):
  if not os.path.exists(path_op):
第60行: 第66行:
====特殊字符====
====特殊字符====
PA='\x04'
PA='\x04'
====list====
#下标从零开始 - print(v1_list[0])
#length - print(len(v1_list))
====三目====
====三目====
max = a if a>b else b
max = a if a>b else b
第69行: 第71行:
  uncol = str([x for x in re.split(" *, *", uncol) if x]).strip('[]')
  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]))''
  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====
====string====
=====split=====
=====split=====
第114行: 第115行:
If sub is empty, returns the number of empty strings between characters which is the length of the string plus one
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]
* 列表截取,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====

2023年3月15日 (三) 10:51的版本

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
指定编码

变量中出现非ASCII字符,则需要指定处理之编码,如:utf-8

#coding=<encoding name> 
OR
#!/usr/bin/python3
#-*- coding: utf-8 -*-

reload

import importlib importlib.reload(usql_sys)

sys

sys.argv 是命令行参数列表,type=列表

ENV

os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8' #oracle

引入路径

同目录或系统

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]

  • 列表截取,list[parm1:parm2:parm3]
  1. parm1:开始下标,可以为空,默认为0
  2. parm2:结束下标,可以为空,默认为 list.size,但是不包括 list.size,左闭右开
  3. 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.')

Tips

迭代