喙审 发表于 2025-10-6 18:48:57

模块

模块:  定义模块时可以把一个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为脚本文件
import sys
if len(sys.argv) < 2:
    print("参数不够")
    exit(0)
print(sys.argv)
    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
    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)  :  生成间的整数
#随机验证码
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 =
v1 = json.dumps(v)
print(v1)
>>>, {"4": 5}]

import json
v =
print(v,type(v))
v1 = json.dumps(v,ensure_ascii = False)
print(v1,type(v1))
>>>
<class 'list'>
, {"4": 5}] <class 'str'>import json
v = ',{"4":5}]'##json 格式的字符串
print(v,type(v))
v1 = json.loads(v)
print(v1,type(v1))
>>>
,{"4":5}] <class 'str'>
, {'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(‘失误”)  则不飘红
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 模块