python模塊

python的優(yōu)點在于有大量3的內(nèi)置模塊和第三方模塊,使用這些模塊我們可以方便地實現(xiàn)需要的功能。本文主要介紹python的模塊結(jié)構(gòu)及常用的內(nèi)置模塊和第三方模塊。

1. 模塊簡介

模塊即包括python聲明及定義的文件。一個python文件就是一個模塊。如編寫一個test.py文件,我們需要將這個文件作為模塊導(dǎo)入,只需要這樣寫:import test 。這樣我們就把test.py作為模塊導(dǎo)入到當前文件,可以使用該模塊定義的功能。模塊名可以使用全局變量__name__得到。

import os
import re
from datetime import datetime

print(os.__name__)
print(re.__name__)

if __name__ == "__main__":
    pass
# 結(jié)果
os
re

在上面代碼中,可以看到有一行:if __name__ == "__main__":,這行代碼為模塊提供了一個便于測試的用戶接口。當我們直接運行該文件時,__name__變量值為"__main__",結(jié)果為True,可直接運行。當作為第三方模塊導(dǎo)入時,__name__變量為模塊名,結(jié)果為False,不能運行該文件,但我們可使用該文件內(nèi)部定義的功能。因此我們編寫python文件時,通常在該行代碼上面定義功能(函數(shù)、類等),在下面定義執(zhí)行代碼,便于檢驗功能正確性。

除此之外,我們可以使用包來組織模塊,避免模塊名的沖突。實質(zhì)上,包就是一個包含多個python文件的目錄。注意:該目錄下一定有一個__init__.py文件,該文件表示當前目錄是一個包。除此之外,包目錄下一般有一個__pycache__目錄,該目錄會緩存每個模塊編譯后的文件(.pyc文件:)。執(zhí)行某個模塊時,會檢查源文件與編譯版文件的修改日期確定是否需要重新編譯。當我們導(dǎo)入模塊時,解釋器會搜索當前目錄,所有已安裝模塊和第三方模塊。搜索路徑可通過sys模塊的path變量獲取。如:

>>> import sys
>>> sys.path
['D:\\software\\PyCharm 2018.1.1\\helpers\\pydev', 'E:\\Code exercise\\Code-exercise\\python', 'E:\\graduation-project', 'D:\\software\\PyCharm 2018.1.1\\helpers\\pydev', 'E:\\env-python\\Scripts\\python36.zip', 'E:\\env-python\\DLLs', 'E:\\env-python\\lib', 'E:\\env-python\\Scripts', 'd:\\software\\python3\\Lib', 'd:\\software\\python3\\DLLs', 'E:\\env-python', 'E:\\env-python\\lib\\site-packages', 'E:\\env-python\\lib\\site-packages\\dlib-19.10.0-py3.6-win-amd64.egg', 'D:\\software\\PyCharm 2018.1.1\\helpers\\pycharm_matplotlib_backend', 'E:\\Code exercise\\Code-exercise\\python', 'E:\\graduation-project', 'E:/Code exercise/Code-exercise/python']

2. 常用內(nèi)置模塊

2.1 os模塊

os模塊封裝了常見的文件和目錄操作。下面列舉常用的方法:

附菜鳥教程的os模塊:https://www.runoob.com/python3/python3-os-file-methods.html

img
2.2 日期時間模塊

附菜鳥教程的時間日期模塊參考:https://www.runoob.com/python3/python3-date-time.html

time模塊

time模塊包含多個有關(guān)時間處理的函數(shù)。下表顯示常用方法:

方法 說明
time.time() 返回以秒為單位的浮點數(shù)時間(unix時間戳,從1970-01-01 00:00:00 UTC)
time.clock() 返回處理器時間
time.sleep() 休眠n秒
time.ctime() 將以秒表示的時間(time.time())轉(zhuǎn)換為當?shù)貢r間的字符串
time.localtime() 將秒為單位的時間轉(zhuǎn)換為表示當?shù)貢r間的時間元組
time.gmtime() 將秒為單位的時間轉(zhuǎn)換為UTC時間的時間元組
time.asctime() 將時間元組轉(zhuǎn)換為當?shù)貢r間的字符串
time.mktime() 將時間元組轉(zhuǎn)換為掛鐘時間
import time

print(time.time())   # 返回以秒為單位的浮點數(shù)時間(unix時間戳,從1970-01-01 00:00:00 UTC)
print(time.clock())  # 返回處理器時間
print(time.ctime())  # 將以秒表示的時間(time.time())轉(zhuǎn)換為當?shù)貢r間的字符串
for x in range(3):
    print('hello world')
    time.sleep(0.1)  # 休眠n秒
print(time.asctime())  # 將時間元組轉(zhuǎn)換為當?shù)貢r間的字符串
print(time.localtime())  # 將秒為單位的時間轉(zhuǎn)換為表示當?shù)貢r間的時間元組
print(time.gmtime())  # 將秒為單位的時間轉(zhuǎn)換為UTC時間的時間元組
print(time.mktime(time.localtime()))  # 將時間元組轉(zhuǎn)換為掛鐘時間
# 結(jié)果
1525878891.406281
4.276538056912168e-07
Wed May  9 23:14:51 2018
hello world
hello world
hello world
Wed May  9 23:14:51 2018
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=9, tm_hour=23, tm_min=14, tm_sec=51, tm_wday=2, tm_yday=129, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=9, tm_hour=15, tm_min=14, tm_sec=51, tm_wday=2, tm_yday=129, tm_isdst=0)
1525878891.0

datetime模塊

datetime模塊對time模塊進行了封裝。包含多個有關(guān)日期時間處理的函數(shù)。

方法 說明
datetime.now() 返回一個datetime對象,表示當?shù)貢r間
datetime.utcnow() 返回一個datetime對象,表示UTC時間
object_datetime.timestamp() 將一個datetime對象轉(zhuǎn)換為unix時間戳
datetime.fromtimestamp() 將Unix時間戳轉(zhuǎn)換為datetime對象
datetime.strftime() 將datetime對象格式化輸出為字符串
datetime.strptime() 將時間字符串轉(zhuǎn)換為datetime對象
from datetime import datetime

print(datetime.now())  # 返回一個datetime對象,表示當?shù)貢r間
print(datetime.utcnow())  # 返回一個datetime對象,表示UTC時間
test_time = datetime.utcnow()
print(test_time.timestamp())  # 將一個datetime對象轉(zhuǎn)換為unix時間戳
print(datetime.fromtimestamp(1525849091.98994))  # 將Unix時間戳轉(zhuǎn)換為datetime對象
print(datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S.%f'))  # 將datetime對象格式化輸出為字符串
print(datetime.strptime('2018-05-09 23:04:12.119774', '%Y-%m-%d %H:%M:%S.%f'))  # 將時間字符串轉(zhuǎn)換為datetime對象
# 結(jié)果
2018-05-09 23:14:51.708639
2018-05-09 15:14:51.708639
1525850091.708639
2018-05-09 14:58:11.989940
2018-05-09 23:14:51.708639
2018-05-09 23:04:12.119774
2.3 collections模塊

python內(nèi)置的集合模塊,提供很多有用的集合類。

namedtuple:命名元組,為一個函數(shù),可用來創(chuàng)建一個自定義的tuple對象。其可規(guī)定元素的個數(shù),并可使用屬性(不是索引)來訪問某個元素 語法:namedtuple('name', [元素])

import collections

Circle = collections.namedtuple('Circle', ['x', 'y', 'z'])
print(isinstance(Circle, tuple))
circle = Circle(5, 6, 7)
print(circle.x, circle.y, circle.z)

# 執(zhí)行結(jié)果
False
5 6 7

deque:列表list為先行存儲,數(shù)據(jù)量較大時,插入刪除效率較低。deque是可實現(xiàn)高效插入和刪除的雙向列表,適合用于隊列和棧。deque不僅實現(xiàn)了list的append和pop,還支持appendleft()和popleft().

import collections

deque_list = collections.deque([1, 2, 3])
print(type(deque_list))
deque_list.appendleft(5)
deque_list.append(6)
print(deque_list)

# 執(zhí)行結(jié)果
<class 'collections.deque'>
deque([5, 1, 2, 3, 6])
2.4 hashlib模塊

提供常用的摘要算法,如MD5,SHA1等。摘要算法:通過一個函數(shù),將任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串(通常用16進制的字符串表示)

import hashlib

md5 = hashlib.md5()
md5.update("how to use md5 in python hashlib?".encode('utf-8'))
print(md5.hexdigest())

# 執(zhí)行結(jié)果
d26a53750bc40b38b65a520292f69306
2.5 urllib模塊

提供了一系列操作URL的功能,可用來模擬瀏覽器執(zhí)行g(shù)et post等請求

from urllib import request

with request.urlopen("http://www.baidu.com") as f:
    data = f.read()
    print("status:", f.status, f.reason)
    for k, v in f.getheaders():
        print("%s: %s" % (k, v))
print('Data:', data.decode('utf-8'))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容