Python 一些总结

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

时间之间的转换

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值