天天看點

Python學習筆記--标準庫篇

子產品

一、子產品種類

  1. Python标準庫
  2. 第三方子產品
  3. 自定義子產品
Pycharm中,Package和Directory差別: Package含有

__init__.py

二、import子產品導入

import

執行流程和用法

step1. 執行import的檔案;
step2. 引入變量名;  
step3. 調用 ```module_name.func_name()```;  
           

僅當module路徑在

sys.path

中時,可直接用import語句調用。

from...import...

用法

  1. from module_name import func_name

  2. from package_1.package_2 import module_name

  3. from package_1.package_2.module_name import func_name

從Package中引用

  1. from package_name import module_name

  2. sys.path

    添加執行檔案所在目錄,調用下級module需要使用from語句進行調用。

    Package用于組織子產品

三、

if __name__ == '__main__'

  1. 用于調用檔案測試
  2. 避免檔案被調用時執行主邏輯

四、Python标準庫常用子產品

time

time.time()        # 時間戳,從1970年1月1日0時至今的秒數(Unix誕生)  
time.localtime()   # 結構化時間(當地)
time.gmtime()      # 結構化時間(标準UTC)
time.mktime()      # 将結構化時間轉換為時間戳  
time.strftime("%Y/%m/%d %X", time.localtime())       # 将結構化時間轉換為字元串時間
time.strptime("2016/12/24/17/50/36", "%Y/%m/%d/%X")  # 将字元串時間轉換為結構化時間  
time.asctime()     # 字元串時間
time.ctime()       # 字元串時間
time.sleep()       # 暫停
           

datetime

datetime.datetime.now()    # 目前日期時間
           

random

random.random()              
random.randint()
random.randrange()
random.choice()
random.sample()
random.uniform()
random.shuffle()
           

os

os.getcwd()            # 擷取目前工作目錄
os.chdir()             # 改變目前腳本的工作目錄
os.makedirs()          # 遞歸生成目錄
os.removedirs()        # 遞歸删除目錄(隻删除空目錄)
os.mkdir()             # 建立單目錄
os.rmdir()             # 删除單目錄
os.listdir()           # 列出指定目錄下的所有子檔案和目錄(包括隐藏)
os.remove()            # 删除單檔案
os.rename()            # 重命名
os.stat()              # 檔案狀态
os.sep                 # 目前系統路徑分隔符
os.linesep             # 目前系統的行終止符
os.pathsep             # 目前平台的用于分割路徑的字元
os.system(command)     # 執行指令
os.path.split(path)    # 将path 分割成(目錄, 檔案名)
os.path.dirname()      # 路徑名
os.path.basename()     # 檔案名
os.path.exist()        # 判斷路徑是否存在
os.path.isabs()        # 是否是絕對路徑
os.path.isfile()       # 是否是檔案
os.path.isdir()        # 是否是目錄
os.path.join()         # 拼接路徑
os.path.getatime()     # 檔案或目錄最後的存取時間
os.path.getmtime()     # 檔案或目錄的最後修改時間
os.path.abspath()      # 絕對路徑
os.path.dirname()      # 所屬檔案夾路徑
           

sys

sys.argv               # 擷取指令,傳回list
sys.stdout.write()     # 向螢幕輸出
sys.path
sys.exit(n)            # 退出
sys.version            # 傳回Python版本
sys.maxint             # 最大的int值
sys.platform           # 傳回作業系統平台名稱
           

json

json.dumps()           # 寫入
json.loads()           # 讀取
json.dump()            # 檔案操作寫入 
json.load()            # 檔案操作讀取
#  資料結構中必須使用雙引号。
           

pickle

pickle.dumps()
pickle.loads()

# pickle後的内容不可讀,對檔案需要使用二進制模式讀寫。  
# 支援的資料類型較json多。
           

shelve

shelve.open()
# 生成三個檔案。
           

xml

import xml.etree.ElementTree as ET

obj = ET.parse("file.xml")
root = obj.getroot()     # 擷取根節點
print(root.tag)     # 擷取标簽名

for i in root:
    for j in i.iter('year'):  # 選擇'year'節點 
        print(j.attrib)  # 擷取屬性值  
        print(j.text)  # 擷取文本内容

        new_year = int(j.text)+1
        j.text = str(new_year)  # 修改文本内容
        j.set("attribute", "value")  # 設定屬性

obj.write("file.xml") # 重新寫入

for country in root.findall("country"):  # 找到所有country标簽
    rank = int(country.find("rank").text)   # 找到rank标簽
    if rank > 50:
        root.remove(country)            

obj = ET.Element('root_node')
name = ET.SubElement(obj, 'node_name', attrib={'attr_name':'value'})
xml_obj = ET.ElementTree(obj)  # 生成文檔對象
obj.write("file_name", encoding='', xml_declaration=True)
           

re

r # 原生字元 (raw string),避免Python解釋器對規則進行轉義。

re.findall()           # 傳回清單
re.search()            # 從任意位置開始查找,傳回對象
re.match()             # 從起始位置開始查找,傳回對象
re.split()             # 分割,傳回清單
re.sub()               # 替換,傳回替換後的字元串
re.subn()              # 替換并顯示替換次數,傳回元組
re.finditer()          # 效果與findall相同,傳回iterator
group()                # 用于擷取match/search對象中的資料
           

logging

import logging

logging.basicConfig(
    level=logging.DEBUG,   # 設定預設級别
    filename='file_name',  # 設定目标輸出位置(檔案)
    filemode='w',          # 更改檔案打開方式(預設為a)
    format='%(asctime)s [%(lineno)d] %(message)s'
) 
# 日志級别
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')  # 預設從warnning級别開始列印
logging.error('error message')
logging.critical('critical message')

logger = logging.getLogger()  # 建立logger對象
fh = logging.FileHandler()  # 
ch = logging.StreamHandler()  #

fm = loggign.Formatter('%(asctime)s')
fh.setFormatter(fm)
ch.setFormatter(ch)

logger.addHandler(fh)
logger.addHandler(ch)
logger.setLevel('DEBUG')

logger.debug()
logger.info()
logger.warning()
logger.error()
logger.critical()
           

configparser

import configparser

config = configparser.ConfigParser()     # 執行個體化config對象  
···
with open('file_name', 'w') as f:
    config.write(f)   # 注意調用方式  
           
config.read('file_name')
config.options()             # 傳回清單
config.items()              # 傳回鍵值對
config.get('key1', 'key2')          # 擷取對應的值
config.write(open())       # 寫入檔案
config.add_section('')     # 新增塊
config.set('section', 'key', 'value')   # 在section下添加鍵值對
           

hashlib

import hashlib

obj = hashlib.md5('salt'.encode('uf8'))
obj.update('string'.encode('utf8'))
print(obj.hexdigest())  # 位數固定