python语言基础(十五)模块(sys、os、time、random、json)

本文详细介绍了Python中的模块概念及其使用,包括导入模块的多种方式,如直接导入、从模块导入特定函数、使用通配符导入等。同时,讲解了几个常用的Python内置模块,如sys用于与解释器交互,os模块提供操作系统相关功能,time模块处理时间,random模块生成随机数,以及json模块进行数据的Json格式转换。此外,还通过示例展示了如何生成验证码及处理Json数据。

模块

python、ipython、IDLE是用来测试代码的。写代码保存的py文件就是模块

模块介绍

模块是一个包含所有你定义的函数和变量的文件,其扩展名为.py。模块可以被其它程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。

导入模块的方式

直接导入模块	
import module_name  

在同一个文件夹下创建 lianxi 和 lianxi1 两个py文件

lianxi.py
def test1():
    print('test1 ceshi')

def test2():
    print('test2 ceshi')
lianxi1.py
import lianxi
lianxi.test1()	# test1 ceshi
lianxi.test2()	# test2 ceshi

通过 import 导入模块,用模块名. 去调用里面的函数,执行模块里面的方法,除非模块里面的函数用main函数保护起来。

从模块里面导入函数、类等
from module_name import name1,name2..  
lianxi1.py
from lianxi import test1,test2
test1()     # test1 ceshi
test2()     # test2 ceshi

lianxi 和 lianxi1 在同一个文件夹下,可以直接写模块名称,若不在同一个文件夹下,需要写入相对路径。

 * 为通配符,表示所有的内容
 from module_name import *  
lianxi1.py
from lianxi import *
test1()     # test1 ceshi
test2()     # test2 ceshi

此方法不常用,把文件中所有的内容都导入进来,一个模块中可能由很多方法、函数、类,全部导入的话会非常消耗内存,如果现有文件里有与导入的文件里存在同名函数,会导致命名冲突,进行覆盖。

lianxi1.py
from lianxi import *
def test1():
    print('new_test1')
test1()     # new_test1
test2()     # test2 ceshi
把导入的函数重新命名,解决命名冲突问题
from module_name import func as test_func 
from lianxi import test1 as T1
def test1():
    print('new_test1')
T1()        # test1 ceshi
test1()     # new_test1

只能一个一个的导入并进行重命名,可以解决命名冲突,并精简函数名

常用内置模块

sys 模块

sys模块是与python解释器交互模块 ,可以通过此模块看解释器的版本,信息,搜索路径等。

sys模块常用方法
sys.argv[] --> 是从程序外部获取参数的桥梁-->[]
其中sys.argv[0]-->程序本身文件路径
sys.argv[1]-->外部运行时传递的参数
import sys
print(sys.argv)   # ['D:/PycharmProjects/untitled1/lianxi1.py']
print(sys.argv[0]) # D:/PycharmProjects/untitled1/lianxi1.py 获得当前文件的绝对路径

res = sys.argv[1]
if res == 'yes':
    print('是的,对了')

在这里插入图片描述

切换到 lianxi1.py所在的文件夹,通过 python lianxi1.py 传入参数 yes,执行lianxi1.py的代码。

sys.verson --> 用来显示解释器版本信息
print(sys.version)  # 解析器版本的信息
# 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]

sys.path --> 用来显示模块搜索路径,从当前文件夹往上,一级一级的找
sys.exit() -->用来退出程序,后面的代码不再执行

print('1'*20)   # 11111111111111111111
print(sys.exit())
print('1'*20)

OS模块

os模块是与操作系统相关的模块

OS模块常用方法
os.getcwd()           --> 用来打印当前工作的路径(目录、文件夹)
os.chdir('切换的路径')              -->  改变当前工作目录
os.makedirs(‘文件夹的嵌套’)        -->  以递归方式创建多个文件夹
os.removedirs(‘文件夹的嵌套’)    -->   以递归方式删除多个空文件夹
os.mkdir(‘文件夹’)             -->  创建单个文件夹,一次只能创建一个
os.rmdir(‘文件夹(的嵌套’))             -->   删除单个空文件夹
os.path.exists('文件夹的嵌套')     -->   判断该路径下的文件或文件夹是否存在
os.path.join()        -->   拼接路径
import os
print(os.getcwd())  # 当前工作路径 D:\PycharmProjects\untitled1

os.chdir('C:')      # 切换当前工作路径为C盘
print(os.getcwd())  #  C:\
os.makedirs('abc\\magic') # 在当前文件夹下,创建abc文件夹,在abc文件夹下创建magic文件夹
                          # 当文件夹存在的时候,再运行创建,会报错
os.removedirs('abc\\magic') # 删除创建的嵌套文件夹,文件夹若非空,则不能删除

os.mkdir('abc')   # 一次只能创建一个文件夹
os.mkdir('abc\\magic')  # 在abc文件夹下创建magic
os.rmdir('abc\\magic')  # 在路径下只能删除一个文件夹
os.rmdir('abc')   # 一次删除一个

print(os.path.exists('abc\\magic'))   # 布尔值

dir_path = 'abc\\magic'
if not os.path.exists(dir_path):
    os.makedirs(dir_path)

j_path = os.path.join(os.getcwd(),'abc\\magic')  # 拼接,不需要考虑转义字符的问题
print(j_path)    # D:\PycharmProjects\untitled1\abc\magic

time模块

time模块是与时间相关的模块,常用的是让程序等待几秒钟再运行,

time模块常用方法
time.sleep()             --> 延迟执行时间,单位为秒,可以为浮点数
time.time()              --> 秒时间戳,从197年到现在的秒数
time.localtime()      --> 本地时间
time.strftime()        --> 接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。

datetime也是与时间相关的模块
datetime.datetime.now() --> 输出当前时间

%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
%z Time zone offset from UTC.
%a Locale’s abbreviated weekday name.
%A Locale’s full weekday name.
%b Locale’s abbreviated month name.
%B Locale’s full month name.
%c Locale’s appropriate date and time representation.
%I Hour (12-hour clock) as a decimal number [01,12].
%p Locale’s equivalent of either AM or PM.

import time
print('-'*10)
time.sleep(2.5)
print('*'*10)
print(time.time())    # 时间戳,1649584204.0715563,1970年到现在的秒数
print(time.localtime(1649584204.0715563))  # 传入时间戳,得到当前时间戳代表的时间,以元组的形式
# time.struct_time(tm_year=2022, tm_mon=4, tm_mday=10, tm_hour=17, tm_min=50, tm_sec=4, tm_wday=6, tm_yday=100, tm_isdst=0)
print(time.localtime())  # 不传时间戳,获取当前的时间,以元组形式
# time.struct_time(tm_year=2022, tm_mon=4, tm_mday=10, tm_hour=17, tm_min=52, tm_sec=22, tm_wday=6, tm_yday=100, tm_isdst=0)
# 时间格式化,将tuple转化为str,连接符不能为中文
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

import datetime
print(datetime.datetime.now())
# 计算7天前的时间
res = datetime.datetime.now() - datetime.timedelta(days=7)
print(res)

random模块

random模块是随机模块

random模块常用方法
random.random()        --> 随机生成[0,1)的数,左闭右开
random.randint(min,max)        -->  随机生成整数[min,max]
random.choice(seq)         -->  随机在序列取元素
random.shuffle(seq)        -->  打乱传入的列表内部顺序,无返回值,只能传入列表
random.sample(seq,num)        -->  从seq中随机去num个元素
random.randrange(start,stop[,step])   -->  随机取整数[start,stop)
random.uniform(min,max)   -->  [min, max)范围内的随机浮点数
import random
print(random.random())  # 生成[0,1)的随机数,左闭右开
print(random.random()*10)   # 生成[0,10)的随机数
print(random.uniform(0,10))   # 生成[0,10)的随机数
li = list('123456')
print(random.choice(li))   # 随机在序列中取值

li1 = [1,2,3,5,6]
# li1 = '123456'    # 报错
# li1 = (1,2,3,5,6)  # 报错
# li1 = {1,2,3,5,6}  # 报错
random.shuffle(li1)   # 只能传入列表,否则报错
print(li1)

print(random.randrange(1,10,2))   # 从range中取随机数

例1.生成6位数字的验证码

import random
def v_code():
    yzm = ''
    for i in range(6):
        num = random.randint(0,9)
        yzm += str(num)
    print(yzm)

v_code()

例2.生成8位数字、字母混合的验证码

print(ord('A'))   # 65
print(chr(65))    # A

在这里插入图片描述

import random
def v_code1():
    yzm = ''
    li = list(range(48,58)) + list(range(65,91)) + list(range(97,123))
    for i in range(8):
        num = chr(random.choice(li))
        yzm += num
    print(yzm)

v_code1()
yzm = ''
li = list(range(48,58)) + list(range(65,91)) + list(range(97,123))
num = random.sample(li, 8)
for i in num:
    yzm += chr(i)
print(yzm)

Json模块

Json是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了Json数据的处理功能。

由于Json与python中的字典格式非常像。所以python中的json模块也相当于是用来使json与字典做转换。但是要注意的是,json中的数据必须使用双引号包裹。

Json模块常用方法

json.loads() --> json转为字典(适用于语句)
json.dumps() --> 字典转为json(适用于语句)
json.load() --> json转为字典(适用于文件,下一节文件操作中讲)
json.dump() --> 字典转为json(适用于文件,下一节文件操作中讲)

dict --> str
1.强转
data = {"age":18}
print(data)   # {'age': 18}
print(str(data),type(str(data)))   # {'age': 18} <class 'str'> 单引号

2.json
import json
data = {"age":18}
res = json.dumps(data)
print(res,type(res))  # {"age": 18} <class 'str'>
str ---> dict
import json
data = '{"age":18}' 
# data = "{'age':18}" # 会报错,json中key和value值必须是双引号
res = json.loads(data)
print(res,type(res))  # {"age": 18} <class 'str'>
print(res['age'])     # 18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值