模块(module)
脚本:把代码写进文件,不在直接写在python解释器中
一个脚本,在python中就是一个.py文件
假设现在.py中有三块代码:
打印9*9乘法表
打印菱形
打印梯形
...
这个代码有五千行,100多个功能
另一个.py文件,要用到上一个py中菱形这个块代码
模块:一个.py文件就是一个模板
为了重复代码的优化,python提出了引用模块
引入模块
import:导入,进口
1.import module_name
import diamond_module # =>python diamond module.py
import tarpezium_module
2.from module_name import class/funcition/variable(可以导入多个)
form packsge import module
module.py
from diamond_module import data
from diamond_module import data2
diamond_module.py
print("打印菱形")
data = "菱形"
data2 = "菱形2"
3.from module_name variable1, variable2
4.from package import *
module.py
from tarpezium_module import *
print(name1)
print(name2)
trapezium_module.py
name1 = ("zhangsan")
name2 = ("lisi")
as :重命名
from tarpezium_module import as b, name2 #就会把name2的值转化为b
--name--(-是下划线,这个文本有问题) 值为模块名称,但是如果主模块(主程序)的时候值是“--main--”;如果不是主模块时,=模块名
module.py
from diamond_module import data as d, data2
print(__name__)
diamond_module.py
print("打印菱形")
print("*" * 80)
print(__name__)
print("*" * 80)
'''
结果:
(1)在module.py中运行
打印菱形
********************************************************************************
diamond_module
********************************************************************************
__main__
(2)在diamond.py中运行
打印菱形
********************************************************************************
__main__
********************************************************************************
'''
在diamond_module中实现;
if __name__ == '__main__':
print("i am a king")
模块搜索路径
os:operation system 操作系统
sys:system系统
random:随机数
re:正则表达式
math:和数字相关
导入 spam模块中,解释器首先查找名为 spam的内置模块;如果没找到,解释器再从 sys.pat变量中的目录里列表里查找samp.py
注:在模块齐名的时候,不要和python解释器内部名称重名
1.没找到的情况下
import sys
print(sys.path)
有搜索顺序:
['D:\pycharm1\PyCharm 2019.3', 'D:\pycharm1\PyCharm 2019.3', 'D:\pycharm1\PyCharm 2019.3\plugins\python\helpers\pycharm_display', 'D:\python\python39.zip', 'D:\python\DLLs', 'D:\python\lib', 'D:\python', 'D:\python\lib\site-packages', 'D:\pycharm1\PyCharm 2019.3\plugins\python\helpers\pycharm_matplotlib_backend']
2.找到的情况
module.py
import test
print(test.data)
test.py
print("My OS")
data = "20210906"
'''
结果:
My OS
20210906
'''
注:不要和python的.py内置文件重名
常用函数:
"""
sys
os
random
json
time
math
re
"""
import time
# form time import time
# from time import *
# time.ctime()
# time.sleep()
# time.strftime()
print(time.time()) # 当前时间和元年之间的间隔时间 =》1970年1月1日
# 1636110023.6204143
print(time.ctime())
print(time.ctime(1636110023.6204143)) # 可以转换到元年的计算时间
time.sleep(0) # 可以暂停
print("sleeping")
time.strftime("")
# yyyy-mm-dd hh:mm:ss
# 20201-10-06 13:31:23
时间的应用:
""" %a 本地化的缩写星期中每日的名称。
%A 本地化的星期中每日的完整名称。
%b 本地化的月缩写名称。
%B 本地化的月完整名称。
%c 本地化的适当日期和时间表示。
%d 十进制数 [01,31] 表示的月中日。
%H 十进制数 [00,23] 表示的小时(24小时制)。
%I 十进制数 [01,12] 表示的小时(12小时制)。
%j 十进制数 [001,366] 表示的年中日。
%m 十进制数 [01,12] 表示的月。
%M 十进制数 [00,59] 表示的分钟。
%p 本地化的 AM 或 PM 。
%S 十进制数 [00,61] 表示的秒。由于历史原因支持61
%U 十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。 在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。
%w 十进制数 [0(星期日),6] 表示的周中日。
%W 十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。
%x 本地化的适当日期表示。
%X 本地化的适当时间表示。
%y 十进制数 [00,99] 表示的没有世纪的年份。
%Y 十进制数表示的带世纪的年份。
%z 时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。
%Z 时区名称(如果不存在时区,则不包含字符)。
%% 字面的 '%' 字符。 """
# strftime(format, p_tuple=None)
print(time.timezone)
# getime():标准时间 格林威治时间
print(time.strftime("%Y-%m-%d %H-%M-%S %A %j %p %U %w", time.gmtime((1636110023.6204143))))
print(time.strftime("%Y-%m-%d %H-%M-%S %A %j %p %U %w", time.localtime((1636110023.6204143))))
print(time.gmtime(1636110023.6204143)) # 把时间切开
""" json:现在在我们web层面用的最多的传输数据的形式 xml,json json模块的模式: 将Python对象转换成json格式的字母 将json格式的字符串转换成python对象 """
import json
dict_data = {"username": "zhangsan", "passward": "123456"}
data = json.dumps(dict_data) # 将python对象转换成json
print(data, type(data))
dict_data = json.loads(data) # 将json转换成obj
print(dict_data, type(dict_data))
list_data = [1, 2, 3]
data = json.dumps(list_data)
print(data, type(data))
list_data = json.loads(data)
print(list_data, type(list_data))
""" 产生随机数 0-1的随机数;随机整数;取样; 随机抽取 random : 取得是0-1之间的随机数 randint : 随机整数, 需要的是范围 choice : 取样
"""
import random
num = random.random()
print(num)
print(int(num * 100))
num = random.randint(1, 100)
print(num)
list_data = [1, 2, 3, 4, 5, 6, 7]
print(random.choice(list_data))
print(random.choices(list_data, k=2))
print(random.sample(list_data, k=2, counts=[1, 2, 3, 4, 5, 6, 7]))
data = random.sample([1, 4, 6, 7, 9], k=2, counts=[3, 2, 1, 3, 1])
print(data)
list_data = [1, 2, 3, 4, 5]
print(random.choices(list_data, k=2, weights=[0, 2, 5, 10, 15]))
""" os => operation system os 模块是Python解释器提供给操作系统的接口给用户
"""
import os print(os.curdir) # 当前工作路径 print(os.environ) # environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\一只傲娇的小莹莹\\AppData\\Roaming', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'LAPTOP-SSB3VCQ9', 'COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe', 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\一只傲娇的小莹莹', 'IDEA_INITIAL_DIRECTORY': 'C:\\Users\\一只傲娇的小莹莹\\Desktop', 'LOCALAPPDATA': 'C:\\Users\\一只傲娇的小莹莹\\AppData\\Local', 'LOGONSERVER': '\\\\LAPTOP-SSB3VCQ9', 'NUMBER_OF_PROCESSORS': '8', 'ONEDRIVE': 'C:\\Users\\一只傲娇的小莹莹\\OneDrive', 'ONEDRIVECONSUMER': 'C:\\Users\\一只傲娇的小莹莹\\OneDrive', 'OS': 'Windows_NT', 'PATH': 'D:\\python\\Scripts\\;D:\\python\\;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Users\\一只傲娇的小莹莹\\AppData\\Local\\Microsoft\\WindowsApps;;D:\\pycharm1\\PyCharm 2019.3\\bin;', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 142 Stepping 12, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '8e0c', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM': 'D:\\pycharm1\\PyCharm 2019.3\\bin;', 'PYCHARM_DISPLAY_PORT': '63342', 'PYCHARM_HOSTED': '1', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'D:\\pycharm1\\PyCharm 2019.3;D:\\pycharm1\\PyCharm 2019.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend;D:\\pycharm1\\PyCharm 2019.3\\plugins\\python\\helpers\\pycharm_display', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\WINDOWS', 'TEMP': 'C:\\Users\\一只傲~1\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\一只傲~1\\AppData\\Local\\Temp', 'USERDOMAIN': 'LAPTOP-SSB3VCQ9', 'USERDOMAIN_ROAMINGPROFILE': 'LAPTOP-SSB3VCQ9', 'USERNAME': '一只傲娇的小莹莹', 'USERPROFILE': 'C:\\Users\\一只傲娇的小莹莹', 'WINDIR': 'C:\\WINDOWS', 'ZES_ENABLE_SYSMAN': '1'}) print(os.name) # NT print(os.cpu_count()) # cpu逻辑处理器 print(os.getcwd()) print(os.path) # 获取当前工作目录
1.切目录
os.chdir("D:\\test") print(os.curdir) print(os.path.abspath(os.curdir))
2.获取当前文件夹下的所有文件和文件夹
访问及列出当前文件里面的东西
print(os.listdir(os.curdir))
3.我去访问:如果是问津我去打印,如果是文件夹先打印然后去访问
4.打印,继续操作:列出嵌套的文件中的文件或文件夹。。。
def list_all_files(path, sep=0):
切换目录
# os.curdir("D:\\test") # os.listdir(path) # print(os.path.abspath(os.curdir))
如果是文件,直接打印,文件必须是完整路径才可以访问到
需要拼接路径
# os.path.join() for sub_path in os.listdir(path): if os.path.isfile(os.path.join(path, sub_path)): # 绝对路径 • print(sep * "\t", sub_path) • pass • if os.path.isdir(os.path.join(path, sub_path)): • print(sep * "\t", sub_path) • list_all_files(os.path.join(path, sub_path), sep=sep + 1)
如果是文件夹先打印在继续访问
list_all_files("D:\\test") """ sys """ import sys print(sys.platform) # Windows版本 print(sys.version) # Python解释器版本 print(sys.path) # 模块搜索路径 内置模块+工作目录+Python解释器 print(sys.modules) # 当前目录包含的模块
practise:递归访问目录:且目录中嵌套目录,有层次的列出给定目录中所有的文件和文件夹
切换目录:os.chdir(path)
判断是否为目录:os.path.isfile(path)
判断是否是目录:os.path.isdir(path)
拼接路径:os.path.join(path1,path2..)