1.字符串
字符串常用方法
方法 | 描述 |
---|---|
title(self, /) | 变成标题模式字符串,单词首字母大写 |
capitalize(self, /) -> str | 首字母大写 |
casefold(self, /) -> str | 大写都变成小写 |
swapcase(self, /) | 小写变大写,大写变小写 |
upper(self, /) | 全变成大写 |
lower(self, /) | 全部转换为小写 |
center(self, width, fillchar=’ ', /) -> str | 将字符串内容居中两边以fillchar填充,总长度为width |
count(sub[, start[, end]]) -> int | 统计字符串内多少个特定字符 |
encode(self, /, encoding=‘utf-8’, errors=‘strict’) | 字符串编码 |
endswith(suffix[, start[, end]]) -> bool | 是否以特定字符串结尾 |
find(sub[, start[, end]]) -> int | 寻找特定字符串出现的下标,没找到返回-1 |
format(*args, **kwargs) -> str | 格式化输出字符串’{0}{1}{2}’.format(1,2,3),{}是占位符,’{name}’.format(name=‘Alex’) |
index(sub[, start[, end]]) -> int | 寻找特定字符串出现的下标,没找到报错 |
join(self, iterable, /) -> str | 将可迭代对象中以字符串作为间隔拼接起来,可迭代对象中元素必须为字符串 |
ljust(self, width, fillchar=’ ', /) | 字符串左对齐,长度为width,空白以fillchar填补 |
rjust(self, width, fillchar=’ ', /) | 字符串右对齐,长度为width,空白以fillchar填补 |
split(self, /, sep=None, maxsplit=-1) | 去掉两边的sep字符串,默认去掉空格符 |
lstrip(self, chars=None, /) | 去掉左边的chars字符串,默认去掉空格符 |
rstrip(self, chars=None, /) | 去掉右边的chars字符串,默认去掉空格符 |
replace(self, old, new, count=-1, /) -> str | 将字符串中的旧字符串全部修改(默认)为新字符串 |
split(self, /, sep=None, maxsplit=-1) -> list | 将整个字符串以特定字符(sep)分割成列表,(默认以空格符分割) |
rsplit(self, /, sep=None, maxsplit=-1) -> list | 在maxsplit输入值的时候会与split有区别 |
startswith(prefix[, start[, end]]) -> bool | 是否以特定字符串开头 |
zfill(self, width, /) | ‘’.zfill(10)不够长度的用0来填补 |
字符串的判断方法
方法 | 含义 |
---|---|
str.isdigit() | 判断字符是否都是数字 |
str.isalnum() | 判断字符是否都是数字或者字母 |
str.isalpha() | 判断字符是否都是字母 |
str.isspace() | 判断字符是否都是空白字符(\t、\n、\r) |
str.istitle() | 判断字符是否首字母都大写,像标题 |
str.islower() | 判断字符是否都是小写 |
str.isupper() | 判断字符是否都是大写 |
string模块中的一些常用变量
import string
string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits
'0123456789'
string.hexdigits
'0123456789abcdefABCDEF'
string.octdigits
'01234567'
string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
string.whitespace
' \t\n\r\x0b\x0c'
string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
2.列表
列表的操作
names = ['Alex','Egon','Peiqi']
#增
#插入
names.insert(1,'hao')
#追加
names.append('hao')
names.extend(['leo','hao'])
#删
names.pop()
names.pop(1)
names.remove('Peiqi')
names.clear()
del names[1]
del names
#改
names[1] = 'hao'
#查
'hao' in names
names.count('a')
names.index('hao') #names.index(str,start,end)
#如果元素不在则报错:ValueError
#排序
names.sort()
#反转
names.reverse()
3.运算
逻辑运算
运算符 | 描述 |
---|---|
and | 返回值为第一个遇到的为False表达式的值 |
or | 返回值为第一个遇到的为True表达式的值 |
not | 返回True或False |
身份运算符:is
a is b # 相当于id(a)==id(b)
type('Alex') # (<class 'str'>
type('Alex') is str # True
type(1) is int # True
type(1.1) is float # True
4.【random模块】
伪随机
import random
random.random() #[0,1)之间的小数
random.seed('asd') #设置随机种子
random.randint(0,10) #返回值为0~10左闭右闭的整数
random.choice(iter) #抽一个
random.sample(iter,int) #不放回抽样
random.shuffle(iter) #原位置乱序
5.实际应用
- 使用str的isdigit方法判断是否输入是一个数字而不是使用异常检测。
if red_ball.isdigit():
- 使用一连串的判断代替and语句
if 0<red_ball<33:
6.字典
创建
person = {'name':'alex','age':20}
person = dict(name='alex',age=20)
{}.fromkeys([1,2,3,4,5,6],100) # 批量生成默认value值的字典,不加第二个参数,value默认为None
增加
names = {}
names['佩奇'] = [26,'讲师',4000]
names.setdefault('oldboy',[50,'boss',10000])
# 先使用names.get('oldboy'),如果返回值为None,则进行赋值,如有返回值,则不进行赋值
# setdefault会将第二个参数返回,无论是否成功添加
删除
names.pop('alex') # key不存在会报错 KeyError: 'alex',返回value:[26, '讲师', 4000]
names.popitem() # 随机删除,返回元组('oldboy', [50, 'boss', 10000])
del names['alex']
del names
names.clear()
修改
- 覆盖:将一个字典中所有元素覆盖到另外一个字典
a = {'name':'leo'}
b = {'name':'leo','age':29}
a.update(b) # a被覆盖
- 直接修改
a['name'] = 'wzh'
查找
names['bob'] # key不存在报错
names.get('bob') # key不存在返回None
names.get('bob',-1) # key不存在返回-1
names.keys() # 返回所有key
names.values() # 返回所有value
names.items() # 返回所有key,value
for k in names: # 官方推荐最快遍历方式
print(names[i])
for k,v in names.items(): # 输出每一对k,v
print(k,v)
7.集合
注意:只能存放不可变类型数据
用途:去重和关系运算(交集、并集等)
去重
list1 = [1,1,1,1]
set1 = set(list1) # {1}
增加
set1.add(2)
set1.add((1,2,3))
删除
set1.discard(1) # 如果值存在则删除,不存在不报错
set1.pop() # 随机删除并返回
set.remove(2) # 删除一个元素,不返回,不存在则报错
查询
(1,2,3) in set1 # True
关系运算
male = {'Alex','leo','bob','Egon'}
teacher = {'Alex','Egon','black girl'}
交集
male & teacher # {'Alex', 'Egon'}
并集
male | teacher # {'Alex', 'Egon', 'bob', 'black girl', 'leo'}
差集
male - teacher # {'leo', 'bob'}
teacher - male # {'black girl'}
对称差集
male ^ teacher # 去掉两个集合中都存在的数据{'leo', 'black girl', 'bob'}
集合的方法
方法 | 描述 | 返回值 |
---|---|---|
A.isdisjoint(B) | 判断集合是否不相交 | bool |
A.issubset(B) | 判断A是否是B的子集 | bool |
A.issuperset(B) | 判断A是否是B的父集 | bool |
A.difference(B) | 求A与B的差集 | A - B |
A.difference_update(B) | 求A与B的差集,结果赋值给A | None,A = A - B |
A.intersection(B) | 求A与B的交集 | A & B |
A.intersection_update(B) | 求A与B的交集,结果赋值给A | A = A & B |
A.symmetric_difference(B) | 求A与B的对称差集 | A ^ B |
A.symmetric_difference_update(B) | 求A与B的对称差集,结果赋值给A | None,A = A ^ B |
A.union(B) | 求A与B的并集 | A | B |
8.编码
- unicode:2~4字节,中文占两个字节
- utf-8:英文占一个字节,欧洲语系占两个字节,东亚占三个字节,其他及特殊字符占四个字节。
- 内存中的编码使用unicode(python3),传输、存储要转换成utf-8,windows默认使用gbk,linux默认使用utf-8
9.文件操作
文件与内存数据结构的转换
# 把字典写入文件
f = open(filename,'w')
users = {'Alex': ['男', 18604922678],'leo':['男',18767135825]}
f.write(str(users))
f.close()
# 把文件中字典写入内存
f = open(filename,'r')
users = eval(f.readline())
f.close()
# eval(),把字符串内容当成python语句执行,可用于数据在文件中的存取
file对象的重要方法
属性、方法 | 描述 | 返回值 |
---|---|---|
close(self, /) | Flush and close the IO object. | None |
flush(self, /) | Flush write buffers, if applicable. | None |
read(self, size=-1, /) | Read at most n characters from stream. | str |
readline(self, size=-1, /) | Read until newline or EOF(the end of file) | str |
seek(self, cookie, whence=0, /) | Change stream position. | int |
tell(self, /) | Return current stream position. | int |
truncate(self, pos=None, /) | Truncate file to size bytes.Returns the new size.新数据从头保留到pos位置,只有w模式可以做截断操作,截断后文件指针位置不变。 | int |
write(self, text, /) | Write string to stream.Returns the number of characters written. | int |
readlines(self, hint=-1, /) | Return a list of lines from the stream. | list |
writelines(self, lines, /) | Write a list of lines to stream.Provided to have a line separator at each of the lines. | None |
name | Name of file(with abspath). | str |
encoding | Encoding of the text stream. | str |
closed | Return whether object was closed. | bool |
新文件覆盖旧文件
import os
os.replace(f1.name,f2.name)
# 相当于将f1重命名为f2,内容是原f1的内容
路径连接
file_path = os.path.join(os.path.dirname(__file__), r'res\stock_data.txt')
file_path = os.path.join(os.path.dirname(__file__), 'res','stock_data.txt')
10.md5加密
对二进制数据进行加密
import hashlib
data = '你好'.encode(encoding='utf-8')
hashlib.md5(data).hexdigest()
11.【collection模块】
namedtuple:带名字的元组
from collections import namedtuple
# namedtuple是一个函数,用来创建一个自定义的tuple对象。
# 可以使用属性名来访问元素。
Point = namedtuple('Point',['x','y'])
p = Point(1,2)
print(p.y) # 输出2
deque:双端队列
from collections import deque
# 实现了左侧也可以追加、弹出元素的列表。
# 传统列表插入、删除元素较慢。
# 双端队列支持两侧追加、弹出元素,效率高适用于队列和栈。
d = deque(['a','b','c'])
d.appendleft('0') # ['0','a','b','c']
d.popleft() # '0'
defaultdict:带有默认值的字典
from collections import defaultdict
# 当使用不存在的key访问字典时,不报错而是获得默认值。
# 不用处理报错信息,方便判断。
dd = defaultdict(lambda:'N/A')
dd['key1'] = 'abc'
dd['key'] # 'N/A'
OrderedDict:有顺序的字典
from collections import OrderedDict
# OrderedDict的键按照添加顺序排列
od = OrderedDict([('a',1),('b',2),('c',3)])
od
Counter:简单计数器
from collections import Counter
# 简单计算器,其实是字典的一个子类
c = Counter()
for ch in 'programming':
c[ch] = c[ch] + 1