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 ', 'qwe ', '123 ', 'zxc ', '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": "u5f20u4e09", "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
时间之间的转换
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()