Python自带了一些有用的模块,在安装Python会自动安装,也可以通过pip的形式安装第三方的优秀模块。
自定义包Python中,模块的集合为包
包组成$ ls PyClass/ Pymain.py $ ls PyClass/ EnumClass.py TestClass.py __init__.py
模块为一个文件夹包含的内部Python文件,用__init__.py为该模块的初始化文件
Pymain.py
#模块包含
from PyClass import EnumClass
from PyClass import TestClass
from PyClass.TestClass import CTest
print(EnumClass.__author__)
print(TestClass.__author__)
#引用模块中的函数
EnumClass.EnumFunc()
TestClass.ClassFunc()
#引用模块中的类
Test = CTest("Test",5)
Test.show()
init.py
#模块包含的文件 __all__ = ["TestClass","EnumClass"]
EnumClass.py
from enum import Enum
#模块作者名
__author__ = "Python Enum Modle"
def EnumFunc():
enumType = Enum("Python",("ONE", "TWO", "THREE"))
#获取枚举值
print(enumType)
print(enumType.ONE)
print(enumType['TWO'])
print(enumType(3))
#模块测试
if __name__=='__main__':
EnumFunc()
TestClass.py
#模块作者名
__author__ = "Python Class Modle"
class CTest(object):
def __init__(self,name = "Python",num = 3):
self.__name = name
self.num = num
def show(self):
print("name:",self.__name,"num:",self.num)
def ClassFunc():
Test = CTest()
Test.show()
#模块测试
if __name__== '__main__':
ClassFunc()
执行结果
$ python Pymain.py Python Enum Modle Python Class ModlePython.ONE Python.TWO Python.THREE name: Python num: 3 name: Test num: 5
引用包内的所有模块
from PyClass import * EnumClass.EnumFunc()
不建议这种使用方式,无法把握包含的模块名是否冲突
自定义模块引用自定义的Python模块,供其他Python调用。模块的搜索地址一般以当前模块所在的地址搜索,当前地址没有就在系统指定的地址搜索,
系统地址:
import sys print(list(sys.path))
执行结果
['C:\Program Files\Python37\python37.zip', 'C:\Program Files\Python37\DLLs', 'C:\Program Files\Python37\lib', 'C:\Program Files\Python37','C:\Program Files\Python37\lib\site-packages']
若需要将地址添加到系统地址,则
sys.path.append('./PyClass')
添加地址为临时地址,仅在当前执行时有效。
模块格式
Test.py
#模块作者名
__author__ = "Python Test Modle"
def Testpy():
print("Test Python")
#模块测试
if __name__== '__main__':
Testpy()
模块引用
Python可以引用具体某个函数或类,也可以引用整个模块
引用包内的具体模块
import Test print(Test.__author__) Test.Testpy()
执行结果
Python Test Modle Test Python查找模块的定义
通过dir函数,查找模块定义的名称以及函数,类等,以list的形式返回。
import Test print(list(dir(Test)))
执行结果
['Testpy', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'sys']以脚本的形式运行模块
当模块包含以下代码时:
if name== ‘main’:
模块便可以以脚本的形式运行,传参保存在sys.argv列表中
Test.py
import sys
__author__ = "Python Test Modle"
def Testpy():
print("Test Python")
for value in sys.argv:
print("argv value:",value)
if __name__== '__main__':
Testpy()
执行结果
$ python Test.py test1 test2 Test Python argv value: Test.py argv value: test1 argv value: test2时间模块
Python的时间模块包括time、日历模块calendar等,使用时需要将模块包含进来
time模块import time,
获取时间信息#获取当前时间戳,1970年1月1日至当前时间的秒数,小数点后面为毫秒
print("Timestamp:",time.time())
#通过时间戳获取对应时间,默认参数为当前时间戳
print("get Time:",time.gmtime(1))
#获取当前时间,默认参数为当前时间戳,若传入时间戳功能与gmtime相同
print("local Time:",time.localtime())
执行结果
Timestamp: 1554037718.1180918 get Time: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0) local Time: time.struct_time(tm_year=2019, tm_mon=3, tm_mday=31, tm_hour=21, tm_min=8, tm_sec=38, tm_wday=6, tm_yday=90, tm_isdst=0)
其中time.gmtime与time.localtime返回的是一个时间元组,可以直接打印,但需要进一步解析时间元组
延时
print("Timestamp:",time.time())
time.sleep(2) #delay 2s
print("Timestamp:",time.time())
time.sleep(0.5) #delay 500ms
print("Timestamp:",time.time())
执行结果
Timestamp: 1554040162.2223516 Timestamp: 1554040164.2239976 Timestamp: 1554040164.7256548解析时间元组
通过打印可以得出时间元组包含的信息
local Time: time.struct_time(tm_year=2019, tm_mon=3, tm_mday=31, tm_hour=21, tm_min=8, tm_sec=38, tm_wday=6, tm_yday=90, tm_isdst=0)
localTime = time.localtime()
print("year:",localTime.tm_year)
print("month:",localTime.tm_mon)
print("day:",localTime.tm_mday)
print("hour:",localTime.tm_hour)
print("minute:",localTime.tm_min)
print("second:",localTime.tm_sec)
#星期 [0~6] 星期一为0
print("week:",localTime.tm_wday)
#当前为一年中的第几天
print("year day:",localTime.tm_yday)
#是否为夏令时
print("is summer time:",localTime.tm_isdst)
执行结果
year: 2019 month: 3 day: 31 hour: 21 minute: 8 second: 38 week: 6 year day: 90 is summer time: 0获取时间字符串
调用time.strftime函数,传入对应的字符串格式化符号信息
#year
print("year info:",time.strftime("year:%Y shorthand:%y"))
#month
print("month info:",time.strftime("month:%B shorthand:%b num:%m"))
#day
print("day info:",time.strftime("day:%d"))
#week
print("week info:",time.strftime("week:%A shorthand:%a num:%w"))
#time
print("24-hour system:",time.strftime("%H:%M:%S"))
print("12-hour system:",time.strftime("%I:%M:%S %p"))
#time string 24-hour system default
print(time.strftime("%c"))
print(time.strftime("%F"))
print(time.strftime("%x"))
print(time.strftime("%T"))
执行结果
year info: year:2021 shorthand:21 month info: month:May shorthand:May num:05 day info: day:16 week info: week:Sunday shorthand:Sun num:0 24-hour system: 19:54:42 12-hour system: 07:54:42 PM Sun May 16 19:54:42 2021 2021-05-16 05/16/21 19:54:4
字符串格式化符号说明
%Y 年 %y 年份后面两位 %B 月份英文全称 %b 月份英文简写 %m 月份的数字表示 %d 当月的第几天 %A 星期英文全称 %a 星期英文简写 %w 星期的数字表示 [0~6] 星期天为0,与时间元组不同 %H 时(24小时制) %I 时(12小时制) %p AM或PM显示 %M 分 %S 秒通过传参获取时间字符串
def GetTimeStringInput(year, mon, day, hour, min, sec):
print("LocalTimeString:", datetime.datetime(year, mon, day, hour, min, sec))
localTime = time.localtime()
GetTimeString(localTime.tm_year, localTime.tm_mon, localTime.tm_mday,
localTime.tm_hour, localTime.tm_min, localTime.tm_sec)
执行结果
LocalTimeString: 2021-05-16 20:21:36通过秒数获取时间datetime
通过秒数可以获取两个时间字符串,一个是本地时间,自动加了时区,另一个是UTC时间
#通过秒数获取本地时间,加了当前时区
def GetLocalTimeBySecond(second):
print("LocalTime:", datetime.datetime.fromtimestamp(second))
#通过秒数获取UTC时间
def GetUTCTimeBySecond(second):
print("LocalTime:", datetime.datetime.utcfromtimestamp(second))
GetLocalTimeBySecond(0)
GetUTCTimeBySecond(0)
执行结果
LocalTime: 1970-01-01 08:00:00 LocalTime: 1970-01-01 00:00:00日历模块calendar
import calendar
calendar模块设置
#设置日历起始星期,[0~6],星期一为0,默认为星期一
calendar.setfirstweekday(6)
print("first week:",calendar.firstweekday())
#判断今年是否为闰年
print(calendar.isleap(time.localtime().tm_year))
执行结果
first week: 6 False获取当月月历
def GetLocalMonth():
#设置日历起始星期,[0~6],星期一为0,默认为星期一
calendar.setfirstweekday(6)
print("first week:",calendar.firstweekday())
#输出当月月历
localMonth = calendar.month(time.localtime().tm_year,time.localtime().tm_mon)
print(localMonth)
print(type(localMonth))
#输出当月月历 localMonth = calendar.month(time.localtime().tm_year,time.localtime().tm_mon) print(localMonth) print(type(localCalendar))
执行结果
def GetLocalYear():
#设置日历起始星期,[0~6],星期一为0,默认为星期一
calendar.setfirstweekday(6)
print("first week:",calendar.firstweekday())
#输出今年的年历
localCalendar = calendar.calendar(time.localtime().tm_year)
print(localCalendar)
print(type(localCalendar))
#输出今年的年历 localCalendar = calendar.calendar(time.localtime().tm_year) print(localCalendar) print(type(localCalendar))
执行结果
thisYear = time.localtime().tm_year
print(thisYear, calendar.isleap(thisYear))
执行结果
2021 False



