python 常用模块

python 常用模块

os

参考链接 https://www.runoob.com/python3/python3-os-path.html
https://www.runoob.com/python3/python3-os-file-methods.html
os.popen() 执行linux命令 返回一个地址, 用 .read()读取内容
os.system() 执行linux名,返回一个数值,0表示执行成功,非0表示执行linux命令失败
os.path.join()函数:连接两个或更多的路径名组件, 不用考虑系统
os.chdir(path)用于改变当前工作目录到指定的路径。
os.getcwd() 方法用于返回当前工作目录。
os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
os.mkdir() 方法用于以数字权限模式创建目录。
os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
os.path.abspath(path) 返回绝对路径
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路径
os.path.exists(path) 路径存在则返回True,路径损坏返回False
os.path.lexists 路径存在则返回True,路径损坏也返回True
os.path.getsize(path) 返回文件大小,如果文件不存在就返回错误
os.path.isabs(path) 判断是否为绝对路径
os.path.isfile(path) 判断路径是否为文件
os.path.isdir(path) 判断路径是否为目录
os.walk(path)列出一个目录下所有的文件名和子文件名

解决vscode导入自定义模块失败

import os, sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # __file__获取执行文件相对路径,整行为取上一级的上一级目录
sys.path.append(BASE_DIR)

sys

参考链接: https://cloud.tencent.com/developer/article/1569291
sys.argv 实现从程序外部向程序内传递参数
(sys.argv[0]:为脚本名称,sys.argv[1]:第一个参数,以此类推)
sys.exit([arg]) 程序中间的退出,arg=0为正常退出
(sys.exit(1) 常用做异常退出)

time

time.tiem() 时间戳
time.ctime() 返回当前时间
time.asctime() 返回一个格式化的时间

random

print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数
print( random.random() ) # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice(‘tomorrow’) ) # 从序列中随机选取一个元素
print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数

json

在这里插入图片描述
json.dumps() 将python对象转为json对象
json.loads() 将json对象转化为python对象
json.dump() 将接送对象写入文件中
json.load() 读取文件中的json对象

jsonpath

在这里插入图片描述

d={
        "error_code": 0,
        "stu_info": [
                {
                        "id": 2059,
                        "name": "小红",
                        "sex": "女",
                        "age": 21,
                        "grade": "天蝎座",
                        "phone": "18378309272",
                        "gold": 10896,
                        "info":{
                            "card":434345432,
                            "bank_name":'中国银行'
                        }
 
                },
                {
                        "id": 2067,
                        "name": "小刚",
                        "sex": "男",
                        "age": 22,
                        "grade": "天蝎座",
                        "phone": "12345678915",
                        "gold": 100
                }
        ]
}
 
res= d["stu_info"][1]['name'] #取某个学生姓名的原始方法:通过查找字典中的key以及list方法中的下标索引
print(res) #输出结果是:小刚
 
import jsonpath
res1=jsonpath.jsonpath(d,'$..name') #嵌套n层也能取到所有学生姓名信息,$表示最外层的{},..表示模糊匹配
print(res1) #输出结果是list:['小红', '小刚']
 
res2= jsonpath.jsonpath(d,'$..bank_name')
print(res2) #输出结果是list:['中国银行']
 
res3=jsonpath.jsonpath(d,'$..name123') #当传入不存在的key(name)时,返回False
print(res3) #输出结果是:False

jmespath

pip install jmespath

通过key 获取值

# 非嵌套字典取值
import jmespath
data = {"a": "apple", "b": "banana", "c": "car"}
print(jmespath.search("c", data))

## 输出结果
# car
# 嵌套字典取值
import jmespath
data = {'a': {'b': {'c': 'car'}}}
print(jmespath.search('a', data))
print(jmespath.search('a.b', data))
print(jmespath.search('a.b.c', data))

## 输出结果
# {'b': {'c': 'car'}}
# {'c': 'car'}
# car
# 非列表取值
import jmespath
data = ['apple', 'banana', 'car', 'dog']
print(jmespath.search('[0]', data))
print(jmespath.search('[1]', data))
print(jmespath.search('[2]', data))
print(jmespath.search('[3]', data))

## 输出结果
# apple
# banana
# car
# dog
# 嵌套列表取值
import jmespath
data = [['apple', 'banana'], ['car', 'dog']]
print(jmespath.search('[0][0]', data))
print(jmespath.search('[0][1]', data))
print(jmespath.search('[1][0]', data))
print(jmespath.search('[1][1]', data))

## 输出结果
# apple
# banana
# car
# dog
# 字典嵌套列表 列表嵌套字典的取值
import jmespath
data = {
    'students': [
        {
            'name': 'zhangsan',
            'age': 12,
            'hobby': ['eat', 'sleep']
        },
        {
            'name': 'lisi',
            'age': 14,
            'hobby': ['sing', 'dance']
        },
        {
            'name': 'wangwu',
            'age': 17,
            'hobby': ['rap', 'basketball']
        }
    ]

}


print(jmespath.search('students[0].name', data))
print(jmespath.search('students[0].age', data))
print(jmespath.search('students[0].hobby[1]', data))

## 输出结果
# zhangsan
# 12
# sleep
# 切片操作
import jmespath
data = [1,2,3,4,5,6,7,8,9]

print(jmespath.search('[0:3]', data))
print(jmespath.search('[4:8]', data))
print(jmespath.search('[:6]', data))
print(jmespath.search('[::3]', data))

#输出结果
# [1, 2, 3]
# [5, 6, 7, 8]
# [1, 2, 3, 4, 5, 6]
# [1, 4, 7]
# 去出所有name的值 
import jmespath
data = {
    'students': [
        {
            'name': 'zhangsan',
            'age': 14
        },
        {
            'name': 'lisi',
            'age': 13
        },
        {
            'name': 'wangwu',
            'age': 16
        }
    ]
}
# print(jmespath.search('students[].name', data))
# [] 中加不加 * 结果一样
print(jmespath.search('students[*].name', data))
## 输出结果
# ['zhangsan', 'lisi', 'wangwu']
# 去除列表中前2个
import jmespath
data = {
    'students': [
        {
            'name': 'zhangsan',
            'age': 14
        },
        {
            'name': 'lisi',
            'age': 13
        },
        {
            'name': 'wangwu',
            'age': 16
        }
    ]
}

print(jmespath.search('students[:2].name', data))
## 输出结果
# ['zhangsan', 'lisi']
# 对象取值使用 * 通配符
import jmespath
data = {
    'class': {
        'class_1' : {
            'name_1': 'zhangsan'
        },
        'class_2' : {
            'name_2': 'lisi'
        },
        'class_3' : {
            'name_3': 'wangwu'
        },
    }
}

print(jmespath.search('class.*.name_1', data))
## 输出结果
# ['zhangsan']

pathlib

from pathlib import Path


print(Path.cwd()) 
# 获取当前路径

print(Path.home())
# 获取home目录

print(Path.cwd().parent)
# 获取上级父目录

print(Path.cwd().parent.parent)
# 获取上上级父目录
# 可支持多层链式操作

for i in Path.cwd().parents:
    print(i)
# 遍历整个父级目录

cur_file_path = os.path.realpath(__file__)

print(Path(cur_file_path).suffix)
# 返回文件的扩展名

print(Path(cur_file_path).stem)
# 返回文件的名称
print(Path(cur_file_path).name)
# 返回路径的文件名

print(Path(Path().cwd()).joinpath('abc.py'))
# 拼接路径

for i in Path(Path.cwd()).iterdir():
    print(i)
# Path(Path.cwd()).iterdir() 返回的是一个生产器
# 遍历当前目录下的所有内容并且是绝对路径

for i in Path().iterdir():
    print(i)
# 遍历当前目录下的所有内容 没有路径

Path(Path.cwd().joinpath('as1').joinpath('qw')).mkdir(parents=True, exist_ok=True)
# 创建路径
print(Path(Path.cwd().joinpath('qwe')).exists())
# 判断对象是否存在

print(Path(Path.cwd().joinpath('as')).is_dir())
# 判断是否为目录

print(Path(Path.cwd().joinpath('as')).is_file())
# 判断是否为文件

Faker

用来构造假数据

pip install Faker

re

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,
re.search 匹配整个字符串,直到找到一个匹配。
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

语法格式为:re.compile(pattern[, flags])
re.findall()在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
参考 : https://www.nowcoder.com/tutorial/10005/405978e43980483691016271ac34c9f8

dotenv

安装

pip install python-dotenv

需要把 .env文件的内容导入到系统环境变量中,以方便程序调用

.env 文件
name='张三'
age=12
sex='男'
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv('.env'))
# find_dotenv默认传入当前路径的.env文件,用户可以自定义其他文件,并把对应的路径传入即可导入到环境变量中
# load_dotenv 加载
env_dist = os.environ
print(env_dist.get('name'))
print(env_dist.get('age'))
print(env_dist.get('sex'))

在这里插入图片描述

requests

requests.get(url) # GET请求
requests.post(url) # POST请求
r.encoding #获取当前的编码
r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok # 查看r.ok的布尔值便可以知道是否登陆成功
#特殊方法#
r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status() #失败请求(非200响应)抛出异常
参考:https://www.cnblogs.com/saneri/p/9870901.html

configparser

内置模块,用来读取conf文件

导入模块

import configparser

conf = configparser.ConfigParser() # 获取一个读取conf文件的句柄

conf.read("myconf.conf") # 读取conf文件

sections = conf.sections() # 获取一个配置项内容 返回的是一个list

option = conf.options("logging") # 获取配置项内容中key对应的value

value = conf.get('logging', 'path') # 根据某个sections 下的某个key 获取对应的value

glob

模块提供了一个函数用于从目录通配符搜索中生成文件列表:

# 获取路径列表
# 如果目录存在返回列表,列表中有目录名称
# 如果目录不存在返回空列表
import glob

print(glob.glob('./test_dirname/'))
# 返回 test_dirname 目录下的所有目录和文件
import glob

print(glob.glob('./test_dirname/*'))
# 不递归的获取 test_dirname 目录下的.py文件

import glob

print(glob.glob('./test_dirname/*.py'))
print(glob.glob('./test_dirname/*/*.py'))
# 递归获取test_dirname 目录下的所有目录和文件

import glob

print(glob.glob('./test_dirname/**', recursive=True))
print(glob.glob('./test_dirname/**/*.py', recursive=True))
import glob

for i in glob.iglob('./test_dirname/*'):
    print(i)
# glob.iglob() 返回一个生成器

hashlib

ipaddr

安装

pip install ipaddr
# 判断一个地址是否在某个网段内
import ipaddr
 
ip = ipaddr.IPv4Address("10.10.1.1")
ip_net = ipaddr.IPv4Network("10.10.1.0/23")
 
if ip in ip_net:
    print("True")
else:
    print("False")
# True 
# 判断一个网段是否属于另一个网段
import ipaddr
 
ip_net1 = ipaddr.IPv4Network("10.10.1.0/24")
ip_net2 = ipaddr.IPv4Network("10.10.0.0/16")
 
if ip_net1 in ip_net2:
    print("True")
else:
    print("False")
# True
# 判断是否属于内网ip
import ipaddr
 
ip1 = ipaddr.IPv4Address("1.1.2.2")
print(ip1.is_private)
 
ip2 = ipaddr.IPv4Address("192.168.2.2")
print(ip2.is_private)
# False
# True
# 判断是否属于内网网段
import ipaddr
 
ip_net1 = ipaddr.IPv4Network("1.1.0.0/24")
print(ip_net1.is_private)
 
ip_net2 = ipaddr.IPv4Network("192.168.1.1/32")
print(ip_net2.is_private)
# 获取网段中子网的ip个数
import ipaddr
 
ip_net1 = ipaddr.IPv4Network("1.1.1.0/24")
print(ip_net1.numhosts)
 
ip_net2 = ipaddr.IPv4Network("192.168.1.1/24")
print(ip_net2.numhosts)
 
ip_net3 = ipaddr.IPv4Network("192.168.1.1/16")
print(ip_net3.numhosts)
# 256
# 256
# 65536
# 获取某个网段中的所有ip
import ipaddr
 
ip_net1 = ipaddr.IPv4Network("1.1.1.0/31")

for ip in ip_net1:
    print(isinstance(ip, ipaddr.IPv4Address))
    print(str(ip)) # 这里遍历时返回的元素是ipaddr.IPv4Address对象,不是一个IP字符串,但可以转换。
# True
# 1.1.1.0
# True
# 1.1.1.1
# 根据索引访问某个网段中的ip
import ipaddr
 
ip_net = ipaddr.IPv4Network("1.1.1.0/24")
print(ip_net[0], ip_net[5])
# 1.1.1.0 1.1.1.5

python3 中的 urllib

包含以下几个模块:

urllib.request - 打开和读取 URL。
urllib.error - 包含 urllib.request 抛出的异常。
urllib.parse - 解析 URL。
urllib.robotparser - 解析 robots.txt 文件
详情参考:https://www.runoob.com/python3/python-urllib.html

time

根据时间戳获取当前格式化时间
timeStamp = 1381419600
timeArray = time.localtime(timeStamp) # 这里格式后 :(tm_year=2021, tm_mon=11, tm_mday=1, tm_hour=22, tm_min=20, tm_sec=51, tm_wday=0, tm_yday=305, tm_isdst=0)
otherStyleTime = time.strftime(“%Y–%m–%d %H:%M:%S”, timeArray)
print(otherStyleTime) # 2013–10–10 23:40:00

pystache

模板替换工具
先看模板
yaml 文件
在这里插入图片描述
json文件
在这里插入图片描述
双花括号中的内容为要替换的变量

在这里插入图片描述
pystache.render() 里面添加两个参数,第一个是json字符串模板,第二个是模板对应的值为dict

输出
在这里插入图片描述
可以看到yaml或json文件中双花括号中的内容已经替换为具体的值

如果出现匹配数据中的key 不存在模板中,会发生什么呢?
在这里插入图片描述

在这里插入图片描述

string 中 Template

模板替换工具
json文件模板
在这里插入图片描述
json文件模板
在这里插入图片描述
代码
在这里插入图片描述

输出
在这里插入图片描述

可以看出,模板文件支持两种写法,$var 和 ${var}

如果出现匹配数据中的key 不存在模板中,会发生什么呢?
会触发keyError 指出不存在变量值
如果不希望报错
则需要
在这里插入图片描述
在这里插入图片描述

datetime

根据时间戳获取当前格式化时间
timeStamp = 1381419600
dateArray = datetime.datetime.fromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime(“%Y–%m–%d %H:%M:%S”)
print(otherStyleTime) # 2013–10–10 23:40:00

python3版本中已经将urllib2、urlparse和robotparser并入了urllib模块中,并且修改urllib模块,其中包含5个子模块,即是help()中看到的那五个名字。如下:

urllib.error:ContentTooShortError、HTTPError、URLError

urllib.parse:parseqs、parseqsl、quote、quotefrombytes、quote_plus、unquote unquoteplus、unquoteto_bytes、urldefrag、 urlencode、urljoin、 urlparse、 urlsplit、 urlunparse、 urlunsplit

urllib.request:AbstractBasicAuthHandler、 AbstractDigestAuthHandler、 BaseHandler、 CatheFTPHandler、 FTPHandler、 FancyURLopener、FileHandler、HTTPBasicAuthHandler、 HTTPCookieProcessor、HTTPDefaultErrorHandler、 HTTPDigestAuthHandler、 HTTPErrorProcessorl、 HTTPHandler、HTTPPasswordMgr、 HTTPPasswordMgrWithDefaultRealm、 HTTPRedirectHandler、HTTPSHandler、OpenerDirector、ProxyBasicAuthHandler ProxyDigestAuthHandler、 ProxyHandler、 Request、URLopener、UnknowHandler、 buildopener、 getproxies、 installopener、 pathname2url、 url2pathname、 urlcleanup、 urlopen、 urlretrieve

urllib.response:addbase、addclosehook、addinfo、addinfourl

urllib.robotparser:RobotFileParser

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值