模块

模块:  定义模块时可以把一个py文件或者一个文件夹(包)称为模块,

      包:里面得有__init__.py 文件

  模块的导入:

      1:   执行的脚本和所需导入的模块在同一目录下时,且需要模块里的很多功能:  import  模块 (as 别名)       模块.函数() 

      2:     from 模块 import  模块 (as 别名)      模块.函数()

      3:   from 模块.模块 import 函数    函数()

__file__为执行脚本时后面的参数,可能给你的是相对路径或绝对路径     具体情况看在终端python解释器后面的路径名(参数),可以通过 os.path.abspath(__file__)将其统一转换为绝对路径

                           os.getcwd()  _ _file_ _  syspath       getcwd和  .  获取的是同一个东西

                                image

image         image

 

 

 

 

sys模块:

    sys.exit(0) :  结束脚本

    sys.argv() :   获取用户输入的参数  以列表存储,sys.argx[0]为脚本文件

import sys
if len(sys.argv) < 2:
    print("参数不够")
    exit(0)
print(sys.argv[1])

image

    sys.path  :   python用来找模块的路径列表     脚本在哪个目录sys.path中就有此目录

image

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')

 image

import shutil
shutil.move(r'D:\guohan\code\模块\hanshu',r'D:\guohan\code\函数')
##文件路径写全不然还是只改在模块下

image 

     shutil.make_archive:   压缩文件  格式:shutil.make_archive(要压缩后的名字(可以含路径指定去哪,不然压缩到脚本所在目录),压缩包格式(如zip),要压缩的文件(指定绝对路径,以找到))

image

    shutil.unpack_archive:  解压文件  格式:shutil.unpack_archive(要解压包的名字(同样的有路径,因为先从sys,path里面找,没有则报错), 要解压的路径(若没有该文件夹自动创建),压缩包的格式)

image

image

 

 

 

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))

    random.randrange(star,stop,step): 

      random.randrange(1,9,2):  随机返回1357中的元素

    random.choice(seq):    随机返回可迭代对象中的元素

    random.sample(seq,k):  随机返回可迭代对象中k个不重复元素,返回一个列表

 

 

getpass模块:

    getpass.getpass() :  密码不显示

#密码不显示
import getpass
pwd = getpass.getpass('输入密码:')
print(pwd)

image

 

 

 

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.stat(file).st_size:  读取文件大小

image

    2.os.path.exists(path):  判断路径是否存在 存在返回True  不存在返回False

image

    3.os.path.abspath():  获取绝对路径,其不关心文件是否存在直接将文件拼接到脚本运行目录后  ,代表脚本运行的目录(即正处目录)  ..代表上级目录

image

    4.os.path.dirname():  获取路径的上一级目录名

image

    5.os.path.join():  对路径进行拼接

    6.os.listdir(path):  查看该目录下第一层文件

image

    7。os.walk(path):  查案看该目录所有层的所有文件    会生成一个生成器得循环去查看  a 为查看的目录    b 为此目录下的文件夹    c为此目录下的文件

image

    8.os.makedirs():  创建目录和子目录

image

    9.os.remove():   删除单个文件

image

    10.os.rename():    重命名

image

    11.os.getcwd():  获取工作目录 

 

 

json,pickle模块:  json是数据交换的格式,所有语言通用,是一种特殊的字符串,所有语言都认识的格式

             pickle只有python用

        json格式字符串最外层只能是[...]或者{...}   里面则是被序列化的对象若里面有字符串则必须是”“

        pickle格式为二进制的字节流

        序列化:python对象(除集合)——>json格式,pickle格式  dumps/dump      json.dumps->str   pickle.dumps->bytes

        反序列化:json格式——>python对象    loads/load

          注意:python中集合,datetime类型不可以转换成json格式

             python中元组转成json格式为[...]        反序列化时由于json里面没有元组所以得到的python对象没有元组

             pthon对象中含有中文序列化时得有json.dumps(v,ensure_ascii=False)

             dump load   (不常用) 操作文件时只能操着单个对象,如load不能把整个json格式文件类容读出来

####序列化
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模块:

    from datetime import 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)

    

    三者转换关系:

 image

 

 

 异常处理:           

试运行try缩进的语句,若出错,运行except Exception as e:后面的语句,避免程序出错

    格式:      try:

               pass

             except Exception as e:

               pass          (   print(‘失败’)或者print(   {e}   )     )

 

 image

i.isdecimal()即使不是数字都能进行判断所以不会触发except

 

 image

content不能进行strip,异常被except捕获执行print()  则不飘红

image

 

posted @ 2025-10-06 19:55  guohan  阅读(23)  评论(0)    收藏  举报