Python小整数池 -5 - 256
字符串常用方法
upper 和 lower 大小写转换
s = 'name'
s1 = s.upper() # 全部大写
s1 = s.lower() # 全部小写
startswith 和 endswith 是否已xx开头或结尾
s = 'abcdef'
print(s.startswith('a')) # True 是否已a为开头
print(s.startswith('ab')) # True 是否已ab为开头
print(s.startswith('b', 1, 4)) # True 第二个参数开始位置, 第三个参数结束为止-1 是否已b为开头
print(s.endswith('f')) # True 是否已a为结束
print(s.endswith('ef')) # True 是否已ef为结束
print(s.endswith('d', 1, 4)) # True 第二个参数开始位置, 第三个参数结束为止-1 是否已d结束
replace 字符串替换
s = '张三asdasdasd张三1232131张三'
s1 = s.replace('张三', '李四') # 把字符串中所有张三替换成李四
s1 = s.replace('张三', '李四', 2) # 把字符串中前两个张三替换成李四
strip 去除字符串指定字符
s = ' 张三 '
s1 = s.strip() # 默认去除空格
s = 'aet张三123'
s1 = s.strip('123aet') # 去除字符串中所有填写的内容
split 字符串分割默认空格分割, 分割后形成一个新的列表
join 链接
s = '张三'
s1 = ':'.join(s) # 张:三
s = ['张三', '李四', '王五'] # 列表中必须都是字符串类型
s1 = ':'.join(s) # 张三:李四:王五
count 字符串中出现的次数
s = 'asdwerweasdrefvaads'
print(s.count('a', 0, 9)) # a在字符串中出现的次数, 可以设置起始位置, 结束位置
isalnum isalpha isdecimal 字符串由xxx组成
s = 'asd123asq'
print(s.isalnum()) # True 字符串由字母或数字组成
print(s.isalpha()) # False 字符串由字母组成 判断是否为纯字母
print(s.isdecimal()) # False 字符串由十进制组成(纯数字) 判断是否为纯数字
len 获取可迭代对象的总个数
s = '其味无穷二群2312'
print(len(s)) # 10
capitalize 首字母大写, 其余的变小写
s = 'abcDef'
s1 = s.capitalize()
print(s1) # Abcdef
swapcase 字符串大写变小写, 小写变大写
s = 'abcDef'
s1 = s.swapcase()
print(s1) # ABCdEF
title 每个单词首字母大写
s = 'abcDef vbd'
s1 = s.title()
print(s1) # Abcdef Vbd
find 和 index 查找字符串中是否包含某个字符
s = 'abcDef vbd'
s1 = s.find('v') # 查找到返回下边位置, 未找到返回 -1 二,三个参数可以设置起始位置
s1 = s.index('t') # 查找到返回下边位置, 未找到报错 二,三个参数可以设置起始位置
print(s1)
列表的相关
ll = ['aaa', '张三', '李四', '王五', 'aaa', '赵六']
ll.pop() # 按照索引删除 , 默认删除最后一个, 返回值: 返回删除的名字
ll.pop(1) # 按照索引删除 , 默认删除最后一个, 返回值: 返回删除的名字
ll.remove('aaa') # 按照名字删除, 如果有多个默认删除第一个
del ll[0] # 按照索引删除, 还可以按照切片删除
sort 和 reverse 排序和翻转
l = [1,4,5,6,3,2,9,7]
l.sort() # 默认从小到大排序
l.sort(reverse=True) # 从小到大排序
l.reverse() # 翻转 [7, 9, 2, 3, 6, 5, 4, 1]
print(l)
文件操作相关
r : 文件读
- f.read() 读取文件全部内容
- f.read(3) 读取指定的字符数
- f.readline() 读取一行, 可以循环读取
- f.readlines() 读取所有行放到列表中, 列表每个元素是一行内容 ['asdf\n', 'qwe\n', '123\n', 'zxc\n', 'asd']
- f.tell() 获取光标的所在位置, 单位字节
- f.seek(0) 改变光标的所在位置
- f.seek(0, 2) 文件最后位置
- ***** for循环文件句柄f *****
w : 文件写
- f.write('要写入文件的内容') 如果文件存在, 先清空原文件内容, 在写入 / 如果文件不存在, 自动创建文件 并写入
- f.flush() 强制刷新
a : 文件追加
- f.write('要写入文件的内容') 如果文件存在, 追加内容 / 如果文件不存在, 自动创建文件 并写入
获取一个对象的所有方法
dir()
s = 'dsfdsfqwd'
print(dir(s))
# ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize',
'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit',
'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition',
'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate',
'upper', 'zfill']
内置函数
reversed() 将一个序列翻转, 返回翻转序列的迭代器
l = reversed('你好') # l 获取到的是一个生成器
print(list(l)) #['好', '你']
ret = reversed([1, 4, 3, 7, 9])
print(list(ret)) # [9, 7, 3, 4, 1]
json序列化
dumps loads xxx类型 转换 字符串 类型 和反转
import json
dic = {'name': '张三', 'age': 18, 'sex': '男'}
ret = json.dumps(dic) # {"name": "\u5f20\u4e09", "age": 18, "sex": "\u7537"} 字符串类型
res = json.loads(ret) # {'name': '张三', 'age': 18, 'sex': '男'} 字典
os模块
os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
# 和文件夹相关
os.makedirs('dirname1/dirname2') # 可生成多层递归目录
os.removedirs('dirname1') # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') # 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
# 和文件相关
os.remove() # 删除一个文件
os.rename("oldname","newname") # 重命名文件/目录
os.stat('path/filename') # 获取文件/目录信息
#path系列,和路径相关
os.path.abspath(path) # 返回path规范化的绝对路径
os.path.split(path) # 将path分割成目录和文件名二元组返回
os.path.dirname(path) # 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) # 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。
os.path.exists(path) # 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) # 如果path是绝对路径,返回True
os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) # 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) # 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) # 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) # 返回path的大小
collections模块
Counter类的目的是用来跟踪值出现的次数
from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c) # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
hashlib 模块
import hashlib
md5 = hashlib.md5('盐'.encode('utf-8')) # md5( 这里可以加盐 要encode )
md5.update('123456'.encode('utf-8'))
print(md5.hexdigest())
# sha系列,sha1,sha224,sha512等等,数字越大, 加密的方法越复杂,安全性越高,但是效率就会越慢。
ret = hashlib.sha1('盐'.encode('utf-8'))
ret.update('12345'.encode('utf-8'))
print(ret.hexdigest())
time模块
时间表现的三种形式
import time
# 时间戳
print(time.time()) # 1589504618.0347571
# 格式化时间字符串
print(time.strftime("%Y-%m-%d %X")) # 2020-05-15 09:06:01
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2020-05-15 09:06:01
# 时间元组
# time.struct_time(tm_year=2020, tm_mon=5, tm_mday=15, tm_hour=9, tm_min=6, tm_sec=52, tm_wday=4, tm_yday=136, tm_isdst=0)
# tm_year(年)
# tm_mon(月)
# tm_mday(日)
# tm_hour(时)
# tm_min(分)
# tm_sec(秒)
# tm_wday(weekday) 0 - 6(0表示周一)
# tm_yday(一年中的第几天)
# tm_isdst(是否是夏令时) 默认为0
print(time.localtime())
ret = time.strftime('%Y{}%m{}%d %H:%M:%S')
print(ret.format('年', '月', '日')) # 2020年05月15 09:21:16
时间之间的转换
![](https://i-blog.csdnimg.cn/blog_migrate/61763551e215fd6e0765963b9b6c6efc.png)
import time
''' 格式化时间字符串先转换成时间元组, 然后转换成时间戳 begin '''
# 格式化时间 ----> 结构化时间
ft = time.strftime('%Y-%m-%d %H:%M:%S')
print(ft) # 2020-05-15 09:12:28
st = time.strptime(ft,'%Y-%m-%d %H:%M:%S')
print(st) # (tm_year=2020, tm_mon=5, tm_mday=15, tm_hour=9, tm_min=12, tm_sec=28, tm_wday=4, tm_yday=136, tm_isdst=-1)
# 结构化时间 ---> 时间戳
t = time.mktime(st)
print(t) # 1589505248.0
''' 格式化时间字符串先转换成时间元组, 然后转换成时间戳 end '''
''' 时间戳先转换成时间元组, 然后转换成格式化时间字符串 begin '''
# 时间戳 ----> 结构化时间
t = time.time()
print(t) # 1589505451.538795
st = time.localtime(t)
print(st) # (tm_year=2020, tm_mon=5, tm_mday=15, tm_hour=9, tm_min=17, tm_sec=31, tm_wday=4, tm_yday=136, tm_isdst=0)
# 结构化时间 ---> 格式化时间
ft = time.strftime('%Y-%m-%d %H:%M:%S',st)
print(ft) # 2020-05-15 09:18:27
''' 时间戳先转换成时间元组, 然后转换成格式化时间字符串 end '''
datetime模块
import datetime
now_time = datetime.datetime.now() # 现在的时间
# 只能调整的字段:weeks days hours minutes seconds
print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后
print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前
print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前
print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后
print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小时后
print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小时前
print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分钟前
print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分钟后
print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前
print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后
current_time = datetime.datetime.now()
# 可直接调整到指定的 年 月 日 时 分 秒 等 2020-05-15 09:44:41.401379
print(current_time.replace(year=1977)) # 直接调整到1977年 1977-05-15 09:43:31.401392
print(current_time.replace(month=1)) # 直接调整到1月份 2020-01-15 09:43:31.401392
print(current_time.replace(year=1989,month=4,day=25)) # 1989-04-25 18:49:05.898601
# 将时间戳转化成时间
print(datetime.date.fromtimestamp(1232132131)) # 2009-01-17
random随机模块
import random
# 随机小数
print(random.random()) # 0.9007997923094767
print(random.uniform(1, 3)) # 1.516807290488208
# 随机整数
print(random.randint(1, 5)) # 5
print(random.randrange(1, 10, 2)) # 大于等于1且小于10之间的奇数
# 随机选择一个返回
print(random.choice([1, '23', [4, 5]])) # 1或者23或者[4,5]
# 随机选择多个返回,返回的个数为函数的第二个参数
print(random.sample([1, '23', [4, 5]], 2)) # [[4, 5], 1]
# 打乱列表顺序
item=[1,3,5,7,9]
random.shuffle(item)
print(item) # [5, 1, 7, 9, 3]
随机验证码
import random
def v_code(amount):
code = ''
for i in range(amount):
num = random.randint(0, 9)
lower_char = chr(random.randint(97, 122)) # a-z
upper_char = chr(random.randint(65, 90)) # A-Z
add = random.choice([num, lower_char, upper_char])
code = "".join([code, str(add)])
return code
print(v_code(6))
logging模块
log文件的相关配置
"""
logging配置
"""
import os
import logging.config
# 定义三种日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d][%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 定义日志输出格式 结束
logfile_dir = os.path.dirname(os.path.abspath(__file__)) # log文件的目录
# print(logfile_dir)
logfile_name = 'log.log' # log文件名
# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):
os.mkdir(logfile_dir)
# log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name)
print(logfile_path)
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
# 打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5, # 循环的文件数
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
}
def load_my_logging_cfg():
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(__name__) # 生成一个log实例
logger.info('It works!') # 记录该文件的运行状态
if __name__ == '__main__':
load_my_logging_cfg()