模块: 定义模块时可以把一个py文件或者一个文件夹(包)称为模块,
包:里面得有__init__.py 文件
模块的导入:
1: 执行的脚本和所需导入的模块在同一目录下时,且需要模块里的很多功能: import 模块 (as 别名) 模块.函数()
2: from 模块 import 模块 (as 别名) 模块.函数()
3: from 模块.模块 import 函数 函数()
__file__为执行脚本时后面的参数,可能给你的是相对路径或绝对路径 具体情况看在终端python解释器后面的路径名(参数),这里通过 os.path.abspath(__file__)将其统一转换为绝对路径
脚本运行查找的路径(相对路径):
1.若不写绝对路径(即使用相对路径),Python 会默认从脚本运行时的“当前工作目录” 开始查找文件。
如
D:/project/
├─ my_script.py (你的压缩脚本)
└─ data/
└─ target.txt (待压缩的文件)
- 若在 D:/project/ 目录下运行 my_script.py ,脚本中用 data/target.txt 这种相对路径,就能找到文件(因为当前工作目录是 D:/project/ )。
- 若在 D:/ 目录下运行 my_script.py (比如执行 python project/my_script.py, 此时_ _file_ _为 project/my_script.py),再用 data/target.txt 就会找不到文件(此时当前工作目录是 D:/ ,而非 D:/project/ ),即便 sys.path 包含 D:/project/ 也没用。
sys模块:
sys.exit(0) : 结束脚本
sys.argv() : 获取用户输入的参数 以列表存储,sys.argx[0]为脚本文件- import sys
- if len(sys.argv) < 2:
- print("参数不够")
- exit(0)
- print(sys.argv[1])
复制代码
sys.path : 默认脚本导入模块时,按照sys.path中的路径取查找相应的模块(环境变量)
返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
- import sys
- for i in sys.path:
- print(i)
- #导入模块时,按照这里面的路径去找
- """
- d:\test\file1
- D:\Python37\python37.zip
- D:\Python37\DLLs
- D:\Python37\lib
- D:\Python37
- D:\Python37\lib\site-packages
- """
- ##情况1: 导入test文件夹下面file1文件夹中file_test1文件夹中的a.py模块
- #由于sys.path中有 d:\test\file1 路径则导入时可以继续按这个路径继续往下找到file_tset1文件中的a.py模块
- #方法一:
- import file1_test1.a
- #方法二:
- from file1_test1 import a
- #方法三:(导入模块中某个函数
- from file1_test1.a import func
- ##情况2: 导入test文件夹下面file2中test2.py模块
- #由于file2在test文件夹下,且sys.path中没有D:\test,所以要在sys.path中添加环境变量去找到file2
- #第一步:由于file2和运行的脚本在同一test文件中所以得获取当前脚本的绝对路径,得到其共同的目录
- import os
- a = os.path.dirname(os.path.abspath(__file__)) #得到D:\test __file__当前脚本的路劲,可能给到的是绝对路径或相对路径
- sys.path.append(a)#将此路径添加到sys.path中,以便找到模块
- #第二步:导入模块
- #方法一:(将file2中test2.py模块全导入
- import file2.test2
- from file2 import test2
- #方法二:(导入个别函数
- from file2.test2 import func2
复制代码
shutil模块: 用于高级的文件操作和目录处理
shutil.rmtree(path) : path得是其绝对路径 递归删除整个文件目录,不可以是文件(删除单个文件用os.remove)- #删除整个目录脚本
- import sys,shutil
- def get_file_path(path):
- file_path = sys.argv[1]
- shutil.rmtree(file_path)
- ######
- import shutil
- shutil.rmtree(r'D:\guohan\code\模块\fsa')
复制代码 shutil.move():重命名并移动(优先于os.rename) 不仅可以重命名还可以移动位置, 要重命名的文件路径得指明(不和脚本在同一目录下时) 重命名后的文件路径也得指明 不然会添加到脚本所在的目录下,指明了路径即使不和脚本在同一目录也能找到并重命名和移动位置- import shutil
- shutil.move(r'D:\guohan\code\函数','hanshu')
复制代码 - import shutil
- shutil.move(r'D:\guohan\code\模块\hanshu',r'D:\guohan\code\函数')
- ##文件路径写全不然还是只改在模块下
复制代码
shutil.make_archive: 压缩文件 格式:shutil.make_archive(要压缩后的名字(可以含路径指定去哪,不然压缩到脚本所在目录),压缩包格式(如zip),要压缩的文件(指定绝对路径,以找到))
shutil.unpack_archive: 解压文件 格式:shutil.unpack_archive(要解压包的名字(同样的有路径,因为先从sys,path里面找,没有则报错), 要解压的路径(若没有该文件夹自动创建),压缩包的格式)
random模块:
random.randint(a,d) : 生成[a,b]间的整数- #随机验证码
- import random
- none_list = []
- for i in range(6):
- data = random.randint(65,90)
- none_list.append(chr(data))
- print("".join(none_list))
复制代码
getpass模块:
getpass.getpass() : 密码不显示- #密码不显示
- import getpass
- pwd = getpass.getpass('输入密码:')
- print(pwd)
复制代码
hashlib模块:
hashlib。md5() : md5密码加密- #md5密码加密
- import hashlib
- def md5_pwd(pwd):
- #加盐
- obj = hashlib.md5('hkhsdkfhjksdh'.encode('utf-8')) #将字符串以utf-8编码进行压缩(二进制->为字节)
- obj.update(pwd.encode('utf-8')) #将密码以utf-8编码进行压缩后加到所加的盐后面进行加密
- data = obj.hexdigest() #将加密的obj(二进制形式)转成字符串
- return data
- num = input("输入密码:")
- print(md5_pwd(num))
复制代码
os模块:
1.os.stst(file).st_size: 读取文件大小
2.os.path.exists(path): 判断路径是否存在 存在返回True 不存在返回False
3.os.path.abspath(): 获取绝对路径,其不关心文件是否存在直接将文件拼接到脚本运行目录后 ,代表脚本运行的目录(即正处目录) ..代表上级目录
4.os.path.dirname(): 获取路径的上一级目录名
5.os.path.join(): 对路径进行拼接
6.os.listdir(path): 查看该目录下第一层文件
7。os.walk(path): 查案看该目录所有层的所有文件 会生成一个生成器得循环去查看 a 为查看的目录 b 为此目录下的文件夹 c为此目录下的文件
8.os.makedirs(): 创建目录和子目录
9.os.remove(): 删除单个文件
10.os.rename(): 重命名
json,pickle模块: json是数据交换的格式,所有语言通用,是一种特殊的字符串,所有语言都认识的格式
pickle只有python用
json格式字符串最外层只能是[...]或者{...} 里面则是被序列化的对象若里面有字符串则必须是”“
pickle格式为二进制的字节流
序列化:python对象(除集合)——>json格式,pickle格式 dumps/dump json.dumps->str pickle.dumps->bytes
反序列化:json格式——>python对象 loads/load
注意:python中集合不可以转换成json格式
python中元组转成json格式为[...] 反序列化时由于json里面没有元组所以得到的python对象没有元组
pthon对象中含有中文序列化时得有json.dumps(v,ensure_ascii=False)- ####序列化
- import json
- v = [1,'guohan','郭晗',(2,3),{'4':5}]
- v1 = json.dumps(v)
- print(v1)
- >>>[1, "guohan", "\u90ed\u6657", [2, 3], {"4": 5}]
- import json
- v = [1,'guohan','郭晗',(2,3),{'4':5}]
- print(v,type(v))
- v1 = json.dumps(v,ensure_ascii = False)
- print(v1,type(v1))
- >>>
- [1, 'guohan', '郭晗', (2, 3), {'4': 5}] <class 'list'>
- [1, "guohan", "郭晗", [2, 3], {"4": 5}] <class 'str'>
复制代码- import json
- v = '[1,"guohan","郭晗",[2,3],{"4":5}]' ##json 格式的字符串
- print(v,type(v))
- v1 = json.loads(v)
- print(v1,type(v1))
- >>>
- [1,"guohan","郭晗",[2,3],{"4":5}] <class 'str'>
- [1, 'guohan', '郭晗', [2, 3], {'4': 5}] <class 'list'>
复制代码
time模块:
1.time.time(): 时间戳
2.time.sleep(): 程序暂停的秒数- import time
- def wrapper(param):
- def inner(*a,**kwa):
- v1 = time.time()
- for i in range(3):
- time.sleep(2)
- print(i)
- param(*a,**kwa)
- v2 = time.time()
- print(v2-v1)
- return inner
- @wrapper
- def func():
- print("func函数")
- func()
- >>>
- 0
- 1
- 2
- func函数
- 6.014153003692627
复制代码 3.time.strftime('%Y-%m-%d'): 格式化的字符串- import time
- a = time.strftime('%Y-%m-%d')
- print(a)
- >>>2025-10-06
复制代码
datetime模块:
1.datetime.now(): 获取当地时间(datatime类型) >>>2025-10-06 18:39:28.716035
2.datetime.utcnow(): 获取世界时间
sttr time datetime 三者转换关系: datetime 为中间枢纽 其可以进行时间的加减
datetime时间加减:- #将字符串转换为datetime时间
- from datetime import datetime, timedelta
- v = datetime.strptime('2025-10-6','%Y-%m-%d')
- ##datetime时间加减 timedelta
- v1 = v + timedelta(days=4)
- print(v1)
复制代码
三者转换关系:
异常处理: - 试运行try缩进的语句,若出错,运行except Exception as e:后面的语句,避免程序出错
复制代码 格式: try:
pass
except Exception as e:
pass
i.isdecimal()即使不是数字都能进行判断所以不会触发except
content不能进行strip,异常被except捕获执行print(‘失误”) 则不飘红
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |