14python模块
2022/2/9 12:42:26
本文主要是介绍14python模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python
文章目录
- python
- 前言
- 一、自定义模块
- 1.导入项目结构
- 2.python模块默认路径
- 3.导入嵌套文件的模块
- 4.导入的方式
- 5.__name__
- 二、第三方模块
- 1.pip安装
- 2.镜像源
- 3.源码安装
- 4.wheel安装第三方包
- 三、内置模块
- 1.os
- 获取当前绝对路径
- 获取当前文件的某级目录
- 拼接路径
- 路径是否存在
- 创建文件夹
- 是否是文件夹
- 删除文件或文件夹
- 查看目录下的文件夹和文件
- 查看目录下所有的文件和文件夹
- 2.shutil文件(夹)的高级操作
- 删除文件夹
- 拷贝文件(夹)
- 文件(夹)重命名
- 压缩文件
- 解压文件
- 3. sys
- 解释器版本
- 接收角本参数
- 模块路径
- 4.random
- 获取范围内的随机整数
- 获取范围内的随机小数
- 抽取一个元素
- 抽取多个元素
- 洗牌
- 5.hashlib
- 加密数据
- 6.json
- 支持的python数据类型
- 序列化
- 反序列化
- 其他类型转json
- dumps\loads与dump\load
- json.dump
- json.load
- 7.time和datetime
- time
- datetime
- timedelta
- 字符串格式的时间 <-----> datetime格式时间
- time格式 <------> datetime格式
前言
模块和包、导入、内置模块
一、自定义模块
1.导入项目结构
- windows下用命令:把项目的结构导入到a.txt中
tree D:\light_gpt2 > D:a.txt
效果是这样的
├── commons │ ├── __init__.py │ ├── temporary.py │ ├── model.py │ ├── tencent │ └── utils.py ├── data.py └── gpt2.py
- 包通俗的理解就是文件夹,模块就是.py文件
包中通常有一个默认内容为空的__init__.py
文件,描述当前包的信息,如版本号之类,导入包下的模块时,该文件会自动加载。python2必须有这个文件,否则报错,而python3不必有。
2.python模块默认路径
- sys模块查看默认的模块路径,存在这个路径的包可以直接导入使用
import sys print(sys.path)
- 在系统中添加路径
sys.path.append("路径") import module # 导入路径下的一个module.py文件
- 写模块名称不能和内置模块、第三方模块同名,否则会覆盖
3.导入嵌套文件的模块
如在run.py中引用commons中的模块时,需要在sys.path中添加路径
├── commons │ ├── __init__.py │ ├── temporary.py │ ├── model.py │ ├── tencent │ └── utils.py ├── pro │ └── run.py └── gpt2.py
import os import sys # 把当前文件的上2级目录路径加在系统中 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
4.导入的方式
- import xxxx 导入一个py文件
- import xxxx.xxxx 导入包下的py文件 代码中使用的时候须带包和模块名字,如xxxx.xxxx.function()
- from xxx import xxx
- from xxx import * 导入其下的所有模块
- from xxx import xxx支持相对导入,.表示当前目录,…表示上一级的目录,如run.py中
from ..commons.utils import utils中的方法
- 导入别名
避免重名
from matplotlib import pyplot as plt import xxx.xxx as xx
5.name
- .py本文中执行时__name__=“main”。
- 导入.py文件中的__name__=它的模块名,也就是文件名称。
# 程序的入口,执行函数。仅定义函数,没有执行函数的.py文件通常不是程序入口 if __name__ == '__main__': start()
二、第三方模块
1.pip安装
- pip和pip3是python自带的包安装工具win下的默认安装目录C:\Python39\Scripts\pip3.exe
pip3 install 模块名称 # 指定版本 pip install numpy==2.2
2.镜像源
pip默认到https://pypi.org
下载第三方模块,该网址在国外,下载很慢,可以切换国内镜像源。
pip install 模块名称 -i https://pypi.douban.com/simple/
在配置文件中加入镜像
# 在终端执行如下命令加入豆瓣源,以后就默认到豆瓣源上找模块并安装 pip3.9 config set global.index-url https://pypi.douban.com/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/
- 包默认安装的路径
#Windows系统: C:\Python39\Lib\site-packages\
3.源码安装
- 下载源码(zip、tar、tar.gz)并解压
- 在包的路径下执行编译和安装命令
python setup.py build python setup.py install
4.wheel安装第三方包
- 安装wheel:pip install wheel
- 下载第三方.whl包
- 进入包的目录进行安装
pip install xxxx.whl
- 安装的包通常在C:\Python\Lib\site-packages(Windows系统)
- sys.path获取这个目录
三、内置模块
1.os
获取当前绝对路径
present_path = os.path.abspath(__file__) print(present_path)
获取当前文件的某级目录
import os # 当前文件的上级目录 present_path = os.path.dirname(__file__) print(present_path) # 当前文件的上上级目录(文件夹) parent_dir = os.path.dirname(os.path.dirname(__file__)) print(parent_dir)
拼接路径
import os # 当前文件的上级目录 当前file的路径是E:/light_gpt2 present_path = os.path.dirname(__file__) print(present_path) # E:/light_gpt2 path1 = os.path.join(present_path, '文件夹2') print(path1) # E:/light_gpt2\文件夹2 path2 = os.path.join(present_path, '文件夹1', '文件夹2', '美食.jpg') print(path2) # E:/light_gpt2\文件夹1\文件夹2\美食.jpg
路径是否存在
import os path2 = os.path.exists(r'E:/light_gpt2') print(path2)
创建文件夹
import os path1 = "E:/light_gpt2" # 判断文件夹是否存在,若不存在,则创建 path2 = os.path.join(path1, '文件夹1', '文件夹2') if not os.path.exists(path2): os.makedirs(path2)
是否是文件夹
import os present_path = os.path.dirname(__file__) file1 = os.path.join(present_path, 'aa', 'bb', 'cc.txt') dir_not = os.path.isdir(file1) print(dir_not) # False folder1 = os.path.join(present_path) dir_not2 = os.path.isdir(folder1) print(dir_not2) # True
删除文件或文件夹
import os import shutil present_path = os.path.dirname(__file__) path2 = os.path.join(present_path, '文件夹1', 'a.txt') if not os.path.exists(path2): os.makedirs(path2) print("创") if os.path.exists(path2): os.remove(path2) # 删文件 print("删") # if os.path.exists(path2): # shutil.rmtree(path2) # 删文件夹 # print("删")
查看目录下的文件夹和文件
import os # 以列表形式显示light_gpt2文件夹下所有的文件夹和文件,包括隐藏的,但是不会查看孙辈文件夹及文件 data = os.listdir("E:/light_gpt2") print(len(data)) print(data)
查看目录下所有的文件和文件夹
import os # 返回一个生成器 data = os.walk("E:/light_gpt2") print(data) # 返回E:/light_gpt2路径下的所有文件和文件夹 # 返回:E:/light_gpt2路径,本路径下文件夹,本路径下的文件 # 如果文件夹中有文件,依以方式递归展开 for path, folders, files in data: print(path,folders,files) print('*'*50) for file_name in files: file_path = os.path.join(path, file_name) postfix = file_path.rsplit(".",1)[-1] if postfix == "py": # print(file_path) pass
2.shutil文件(夹)的高级操作
删除文件夹
shutil.rmtree(path2)
拷贝文件(夹)
import os import shutil present_path = os.path.dirname(__file__) path1 = os.path.join(present_path, '海边') path2 = os.path.join(present_path, '文件夹1') # 把path2内的东西拷到path1中 shutil.copytree(path2, path1)
import os import shutil present_path = os.path.dirname(__file__) file1 = os.path.join(present_path, '文件夹1','海边.jpg') file2 = os.path.join(present_path, '文件夹1','2.jpg') # 把file1复制并重新命名到file2 shutil.copy(file1, file2)
文件(夹)重命名
import os import shutil present_path = os.path.dirname(__file__) file1 = os.path.join(present_path, '文件夹1','海边.jpg') file2 = os.path.join(present_path, '文件夹1','2.jpg') # 把file1重命名为file2 shutil.move(file1, file2)
import os import shutil present_path = os.path.dirname(__file__) file1 = os.path.join(present_path, '文件夹1') file2 = os.path.join(present_path, '文件夹2') # 把文件夹folder1重命名为folder2 shutil.move(file1, file2)
压缩文件
import os import shutil present_path = os.path.dirname(__file__) file2 = os.path.join(present_path, '文件夹2') # base_name,压缩后的压缩包文件 # format,压缩的格式,例如:"zip", "tar", "gztar", "bztar", or "xztar". # root_dir,要压缩的文件夹路径 shutil.make_archive(base_name=r'condense',format='zip',root_dir=file2)
解压文件
import shutil # filename,要解压的压缩包文件 # extract_dir,解压的路径 # format,压缩文件格式 shutil.unpack_archive(filename=r'condense.zip', extract_dir=r'E:\light_gpt2\海边', format='zip')
3. sys
解释器版本
sys.version sys.version_info sys.version_info.major sys.version_info.minor sys.version_info.micro sys.path
接收角本参数
- sys.argv
以列表形式接收参数
命令行中运行角本时输入一些参数,这些参数被argv接收。
# test.py及之后的参数被argv以列表形式接收 python test.py
模块路径
- sys.path
4.random
获取范围内的随机整数
import random a = random.randint(1, 30) print(a)
获取范围内的随机小数
import random a = random.uniform(1, 30) print(a)
抽取一个元素
import random a = random.choice([78, 85, 36, 24, 99]) print(a)
抽取多个元素
import random a = random.sample([78, 85, 36, 24, 99], 2) print(a)
洗牌
import random a1 = [78, 85, 36, 24, 99] random.shuffle(a1) print(a1)
5.hashlib
加密数据
import hashlib # 加把盐 encryption = hashlib.md5("sdbtedfdf".encode('utf-8')) encryption.update("张三".encode('utf-8')) res = encryption.hexdigest() print(res)
6.json
- python的数据与json格式相互转化
- 各种语言系统之间通过json传递数据
支持的python数据类型
+-------------------+---------------+ | Python | JSON | +===================+===============+ | dict | object | +-------------------+---------------+ | list, tuple | array | +-------------------+---------------+ | str | string | +-------------------+---------------+ | int, float | number | +-------------------+---------------+ | True | true | +-------------------+---------------+ | False | false | +-------------------+---------------+ | None | null | +-------------------+---------------+
序列化
- python数据 --> json
import json python_data = [ {"id": 1, "name": "武大", "age": 3}, {"id": 2, "name": "熊二", "age": 2}, ] results = json.dumps(python_data) print(results) # [{"id": 1, "name": "\u6b66\u5927", "age": 3}, {"id": 2, "name": "\u718a\u4e8c", "age": 2}] results = json.dumps(python_data, ensure_ascii=False) print(results) # [{"id": 1, "name": "武大", "age": 3}, {"id": 2, "name": "熊二", "age": 2}]
反序列化
- json格式 -> python数据
import json data_json = '[{"id": 1, "name": "武大", "age": 3}, {"id": 2, "name": "熊二", "age": 2}]' data_python = json.loads(data_json) print(data_python)
其他类型转json
- 需要自定义JSONEncoder才能实现
import json from decimal import Decimal from datetime import datetime dic1 = [ {"id": 1, "name": "熊大", "age": 3, 'height': Decimal("20.36"), 'date': datetime.now()}, {"id": 2, "name": "熊二", "age": 4, 'height': Decimal("15.65"), 'date': datetime.now()}, ] class MyJSONEncoder(json.JSONEncoder): def default(self, o): if type(o) == Decimal: return str(o) elif type(o) == datetime: return o.strftime("%Y-%M-%d") return super().default(o) json_data = json.dumps(dic1, cls=MyJSONEncoder,ensure_ascii=False) print(json_data)
dumps\loads与dump\load
json.dumps | 序列化生成一个字符串 |
json.loads | 序列化生成python数据类型 |
json.dump | 数据序列化并写入文件 |
json.load | 读取文件中的数据并反序列化为python的数据类型 |
json.dump
import json dic1 = [ {"id": 1, "name": "熊大", "age": 3}, {"id": 2, "name": "熊二", "age": 4} ] file1 = open('xxx.json', mode='w', encoding='utf-8') json.dump(dic1, file1) file1.close()
json.load
import json file1 = open('xxx.json', mode='r', encoding='utf-8') data = json.load(file1) print(data) file1.close()
7.time和datetime
-
UTC/GMT:世界时间
-
本地时间:本地时区的时间
time
import time # 时间戳自1970-1-1 00:00 a1 = time.time() print(a1) # 时区,秒数, a2 = time.timezone print(a2/60/60) #东八区 print("睡3秒") # 睡3秒,再执行 time.sleep(3) print("醒了")
datetime
from datetime import datetime, timezone, timedelta time_1 = datetime.now() # 当前本地时间 print(time_1) tz = timezone(timedelta(hours=8)) # 东8区时间 print(tz) time_2 = datetime.now(tz) print(time_2) time_3 = datetime.utcnow() # 当前UTC时间 print(time_3)
timedelta
- datetime类型可以 +- timedelta类型
from datetime import datetime, timedelta time_1 = datetime.now() print(time_1) # timedelta参数设置天等进行加减 time_2 = time_1 + timedelta(days=88, minutes=9) print(time_2)
- datetime类型 - datetime类型,相减的结果是时间间隔,但不能相加
在这里插入代码片
字符串格式的时间 <-----> datetime格式时间
from datetime import datetime, timedelta # 字符串格式的时间 ---> datetime格式时间 text = "2022-2-2" time_1 = datetime.strptime(text,'%Y-%M-%d') # %Y 年,%m,月份,%d,天。 print(time_1) # datetime格式时间 ----> 字符串格式的时间 time_2 = datetime.now() time_al = time_2.strftime("%Y-%m-%d %H:%M:%S") print(time_al)
time格式 <------> datetime格式
import time from datetime import datetime, timedelta # time格式 --> datetime格式 time_1 = time.time() print(time_1) datetime1 = datetime.fromtimestamp(time_1) print(datetime1) print("*"*50) # datetime格式 ---> time格式 datetime2 = datetime.now() print(datetime2) time_2 = datetime2.timestamp() print(time_2)
这篇关于14python模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南