Python基础:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
第93行: 第93行:
=====字符串方法=====
=====字符串方法=====
str.upper()
str.upper()
str.lower()
str.lower()
str.capitalize()   
str.capitalize()   
首个字母大写,其余小写
首个字母大写,其余小写
str.casefold()  
str.casefold()  
消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。 例如,德语小写字母 'ß' 相当于 "ss"。 由于它已经是小写了,lower() 不会对 'ß' 做任何改变;而 casefold() 则会将其转换为 "ss"
消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。 例如,德语小写字母 'ß' 相当于 "ss"。 由于它已经是小写了,lower() 不会对 'ß' 做任何改变;而 casefold() 则会将其转换为 "ss"
str.center(width[, fillchar])
str.center(width[, fillchar])
返回长度为 width 的字符串,原字符串在其正中。 使用指定的 fillchar 填充两边的空位(默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本
返回长度为 width 的字符串,原字符串在其正中。 使用指定的 fillchar 填充两边的空位(默认使用 ASCII 空格符)。 如果 width 小于等于 len(s) 则返回原字符串的副本
str.count(sub[, start[, end]])
str.count(sub[, start[, end]])
返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 可选参数 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
If sub is empty, returns the number of empty strings between characters which is the length of the string plus one





2023年1月11日 (三) 10:36的版本

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

  1. 下标从零开始 - print(v1_list[0])
  2. 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"]
与 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.')