Python3學習筆記(5)常用模組:time、datetime、random、os、sys、shutil、shelve、xml處理

吳疆發表於2019-05-30

---------------個人學習筆記---------------

---配套視訊個人購買,可有償提供---

------點選此處連結至部落格園原文------

 

1. 同級目錄中import匯入模組、包

import module1  呼叫時為module1.fun1()

from module1 import * 呼叫時為fun1()

from module1 import fun1 as f 呼叫時為f()

from . import xxx(.表示同級目錄)

包(package):從邏輯上組織模組,本質上是一個目錄(含__init__.py檔案)

匯入模組本質是將模組xxx全部(import xxx)或模組內某部分###(from xxx import ###)載入解釋一遍,匯入包本質是執行__init__.py檔案

若在與包同級的檔案中需要呼叫包中與__init__.py同級的模組,則需在__init__.py中from . import xxx,而import xxx卻無效

模組包含(標準庫+開源模組+自定義模組)

2.time與datetime

-----------------------------------------time----------------------------------------------------

time.time() 獲取時間戳,單位為秒,從1970年1月1日0時0分0秒計算
time.sleep() 延時
time.gmtime() 轉換時間戳為UTC時區元組,不傳引數預設當前時間戳
time.localtime()  轉換時間戳為本地時間(UTC時區+8)元組,不傳引數預設當前時間戳

time.mktime() 轉換本地時間元組為時間戳,必須傳入引數
time.strftime(time_format,tuple)  time_format = "%Y-%m:%d %H:%M:%S"  轉換時間元組為字串,傳入引數為time_format和tuple,預設tuple為當前時間
time.strptime(string,time_format) 轉換時間的字串為元組,要求必須傳string和字串的time_format
time.asctime() 轉換元組為字串(類似於"Sat Aug 20 14:59:45 2019"),無引數則預設傳入localtime()
time.ctime() 轉換時間戳為字串(類似於"Sat Aug 20 14:59:45 2019"),無引數則預設傳入localtime()

 

------------------------------------datatime:基於time的高層封裝---------------------------------------------------

date類,年月日
time類,時分秒
datetime類,年月日分時秒
datetime.datetime.now() 獲取當前時間
datetime.timedelta() 時間加減,需與datetime.datetime.now() 同時使用
c_time = datetime.datetime.now() print(c_time.replace(minute = 3, hour = 2))  時間替換

3.random模組

random.random() 返回0~1隨機浮點數
random.uniform(x,y) 返回指定區間x~y的隨機浮點數
random.randint(x,y) 返回[x,y]隨機整數
random.randrange(x,y) 返回範圍為[x,y)的隨機整數,不包含y
random.choice(序列) 返回序列(列表、字串、元組)中任意一個元素
random.sample(序列,num) 返回序列中任意num個元素組成的列表
random.shuffle(列表) 列表洗牌

# -*- coding:utf-8 -*-
# Author: WUJiang
# 生成4位隨機驗證碼(字母、數字),random模組實際應用

import random
auth_code = ""
for i in range(4):
    random_num = random.randrange(0, 4)
    if i == random_num:
        code_element = chr(random.randint(65,90)) # chr()內建函式,轉換數字為對應的ASCII碼
    else:
        code_element = random.randint(0,9)
    auth_code += str(code_element)
print(auth_code)

 4.os模組(對作業系統的一些呼叫)

os.getcwd() 獲取當前工作目錄路徑
os.chdir("路徑") 切換路徑(windows中需要多加\轉譯,或在路徑前面加r) 相當於cd
os.curdir 當前目錄.
os.pardir 當前目錄的父目錄字串名..
os.makedirs() 多層遞迴建立目錄,如os.makedirs(r"C:a\b\c\d")
os.removedirs() 遞迴逐級刪除目錄,如果為空就刪除
os.mkdir() 建立單級目錄,前級目錄需要存在
os.rmdir() 刪除單級目錄,若目錄不為空則無法刪除
os.listdir() 列出指定目錄所有檔案和子目錄,若不傳參則預設當前目錄
os.remove() 刪除一個檔案
os.rename("old","new")  重新命名檔案/目錄
os.stat() 獲取檔案/目錄狀態資訊元組,必須傳參
os.sep 作業系統特定的路徑分隔符
os.linsep 當前平臺使用的行終止符
os.pathsep 用於分割檔案路徑的字串,如;
os.name 字串指示當前使用平臺(win:nt Linux:posix)
os.system("shell 命令") 執行shell命令,如os.system("dir")
os.environ 獲取系統環境變數
os.path.abspath(path) 將path規範化的絕對路徑
os.path.split(path) 將path分割成目錄和檔名元組返回
os.path.dirname(path) 返回path的上級目錄路徑
os.path.basename(path) 返回path最後的檔名
os.path.exists(path) 判斷path是否存在
os.path.isabs(path) 判斷path是否為絕對路徑
os.path.isfile(path) 判斷是否為一個存在的檔案
os.path.isdir(path) 判斷是否為一個存在的目錄 
os.path.join(path1,path2,path3) 組合多個路徑,絕對路徑之前的第一個引數會被忽略
os.path.getatime(path) 返回path指向的檔案或目錄最後存取時間戳
os.path.getmtime(path) 返回path指向的檔案或目錄最後修改時間戳

5.sys模組

sys.argv 命令列引數列表,第一個元素為程式名稱
sys.exit(n) 退出程式,正常退出時exit(0)
sys.version 獲取Python直譯器版本資訊
sys.path  為Python環境變數
sys.platform 返回作業系統平臺名稱,即使64位機器也會顯示win32(32位和64位windows作業系統都是執行在NT核心之上的win32子系統)
sys.stdout.write() 標準輸出
sys.stdin.readline() 獲取標準輸入,包括\n

6.shutil模組

用於copy檔案
shutil.copyfileobj(fsrc,fdst,length)  拷貝檔案,引數為檔案控制程式碼,length指定長度,預設為全部內容copy
shutil.copyfile(src,dst) 拷貝檔案,引數為檔名
shutil.copymode(src,dst) 僅拷貝許可權
shutil.copystat(src,dst) 拷貝狀態資訊,如最後更新時間
shutil.copy(src,dst)  拷貝檔案和許可權
shutil.copy2(src,dst) 拷貝檔案和狀態資訊
shutil.copytree(src,dst) 遞迴拷貝檔案,即拷貝目錄,引數為檔名
shutil.rmtree() 遞迴刪除目錄(檔案),引數為檔名
shutil.move(src,dst) 遞迴地移動檔案
shutil.make_archive(base_name,format,root_dir...) 建立壓縮包,base_name為壓縮後的檔名或含檔名的路徑,format為壓縮格式(zip、rar...),root_dir為待壓縮的檔案/目錄
shutil對壓縮包的處理是呼叫zipfile模組或tarfile模組進行的,“w”、“r”分別代表壓縮、解壓,詳情可參考相關模組幫助

7.shelve模組

shelve是一個簡單的key-value將記憶體通過檔案持久化的模組,可以持久化任何pickle可支援的Python資料格式

# -*- coding:utf-8 -*-
# Author: WUJiang
# shelve模組
import shelve

s = shelve.open("shelve_file")
name = ["zhangsan", "lisi", "wangwu"]
info = {
    "age": 22,
    "sex": "male"
}
s["name"] = name  # 持久化list
s["info"] = info  # 持久化dict

print(s["name"])
print(s["info"])
# ...

8.xml處理模組

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>
# -*- coding:utf-8 -*-
# Author: WUJiang
# 解析xml檔案

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")
root = tree.getroot()
print(root.tag)  # data

# 遍歷xml文件
for child in root:
    print(child.tag, child.attrib)
    for i in child:
        print(i.tag, i.text)

# 只遍歷某個節點,如year結點
for node in root.iter("year"):
    print(node.tag, node.text)

# 修改
for node in root.iter("year"):
    new_year = str(int(node.text) + 1)
    node.text = new_year        # 更改結點內容
    node.set("updated", "yes")  # 新增屬性
tree.write("test.xml")  # 修改寫回

# 刪除
for i in root.findall("country"):
    rank = int(i.find("rank").text)
    if rank > 50:
        root.remove(i)
tree.write("output.xml")
# -*- coding:utf-8 -*-
# Author: WUJiang
# 建立xml檔案

import xml.etree.ElementTree as ET

new_xml = ET.Element("infolist")  # 根節點
info = ET.SubElement(new_xml, "info", attrib={"enrolled": "yes"})  # new_xml的子節點
name = ET.SubElement(info, "name")
age = ET.SubElement(info, "age", attrib={"checked": "no"})
sex = ET.SubElement(info, "sex")
name.text = "laowang"
age.text = "24"   # cannot serialize 24 (type int)
sex.text = "male"

info2 = ET.SubElement(new_xml, "info", attrib={"enrolled": "yes"})  # new_xml的子節點
name2 = ET.SubElement(info2, "name")
age2 = ET.SubElement(info2, "age", attrib={"checked": "no"})
sex2 = ET.SubElement(info2, "sex")
name2.text = "xiaoli"
age2.text = "25"   # cannot serialize 24 (type int)
sex2.text = "female"

et = ET.ElementTree(new_xml)  # 生成文件物件
et.write("info.xml", xml_declaration=True)
# ET.dump(new_xml)  # 列印生成的格式
<?xml version='1.0' encoding='us-ascii'?>
<infolist>
    <info enrolled="yes">
        <name>laowang</name>
        <age checked="no">24</age>
        <sex>male</sex>
    </info>
    <info enrolled="yes">
        <name>xiaoli</name>
        <age checked="no">25</age>
        <sex>female</sex>
    </info>
</infolist>

 

相關文章