主頁 > 後端開發 > python函式之內置函式 模塊

python函式之內置函式 模塊

2022-03-08 06:28:44 後端開發

 

abs    絕對值函式

print(abs(-1))
print(abs(100))

 

round  四舍五入

奇進偶不進 n.5的情況特定發生

res = round(3.87)
res = round(4.51)
# res = round(2.5)列印結果 2
# res = round(3.5) 列印結果4
res = round(6.51)
print(res)

 

sum    計算一個序列得和

lst = [1,2,3,4,34]
res  = sum(lst)
print(res)

total = 0
for i in lst:
    total += i
print(total)

 

 

max 獲取一個序列里邊的最大值
min 獲取一個序列里邊的最小值

lst = (-100,1,2,3,4,34)
res = max(lst)
res = min(lst)
print(res)

 

max / min 的高階函式的使用方式

tup = (   ("趙萬里",100)  , ("趙沈陽",101) , ("孟凡偉",99) )
def func(n):
    # print(n)
    # 按照年齡找到最小值元組
    return n[-1]
    
res = min(tup,key=func)
print(res)
res = max(tup,key=func)
print(res)


dic = {"趙萬里":100,"趙沈陽":200,"孟凡偉":-5000}
def func(n):
    # 如果是字典,默認傳遞的是鍵
    # print(dic[n])
    return abs(dic[n])
res = min(dic,key=func)
res = max(dic,key=func)
print(res)

 

pow    計算某個數值的x次方

如果是三個引數,前兩個運算的結果和第三個引數取余

print(pow(2,3))
print(pow(2,3,7))
print(pow(2,3,4))
print(pow(2,3,5))

 

range  產生指定范圍資料的可迭代物件

# 一個引數
for i in range(3): # 0 1 2
    print(i)
    
# 二個引數
for i in range(3, 8): # 3 4 5 6 7 
    print(i)

# 三個引數
# 正向操作
for i in range(1,9,5): # 1 6 留頭舍尾
    print(i)
    
# 逆向操作
for i in range(9,1,-3): # 9 6 3 

 

bin    將10進制資料轉化為二進制

print(bin(8))

oct    將10進制資料轉化為八進制

print(oct(8))

hex    將10進制資料轉化為16進制

print(hex(16))

chr    將ASCII編碼轉換為字符

print(chr(65))

ord    將字符轉換為ASCII編碼

print(ord("A"))

 

eval和exec在和第三方用戶互動時候,謹慎使用

 

eval   將字串當作python代碼執行

strvar = "print(123)"
strvar = "int(15)"
print(strvar)
res = eval(strvar)
print(res,type(res))

# strvar = "a=3" error eval的局限性 不能創建變數
# eval(strvar)

 

exec   將字串當作python代碼執行(功能更強大)

strvar = "a=3" 
exec(strvar)
print(a)


strvar = """
for i in range(10):
    print(i)
"""
exec(strvar)

 

repr   不轉義字符輸出字串

strvar = "D:\nython32_gx\tay14"
res = repr(strvar)
print(res)

 

input  接受輸入字串

res = input("輸入內容")
print(res , type(res))

 

hash 生成哈希值  檔案校驗

with open("ceshi1.py",mode="r",encoding="utf-8") as fp1, open("ceshi2.py",mode="r",encoding="utf-8") as fp2:
    res1 = hash(fp1.read())
    res2 = hash(fp2.read())
    if res1 == res2:
        print("檔案校驗成功")
    else:
        print("檔案校驗失敗")

 

數學模塊 import math

ceil()  向上取整操作 (對比內置round) ***

res = math.ceil(3.01)
res = math.ceil(-3.45)
print(res)

 

floor() 向下取整操作 (對比內置round) ***

res = math.floor(3.99)
res = math.floor(-3.99)
print(res)

 

pow()  計算一個數值的N次方(結果為浮點數) (對比內置pow)

結果為浮點數,必須是兩個引數

res = math.pow(2,3)
# res = math.pow(2,3,3) error
print(res)

 

sqrt() 開平方運算(結果浮點數)

res = math.sqrt(9)
print(res)

 

fabs() 計算一個數值的絕對值 (結果浮點數) (對比內置abs)

res = math.fabs(-1)
print(res)

 

modf() 將一個數值拆分為整數和小數兩部分組成元組

res = math.modf(3.897)
print(res)

 

copysign()  將引數第二個數值的正負號拷貝給第一個 (回傳一個小數)

res = math.copysign(-12,-9.1)
print(res)

 

fsum() 將一個容器資料中的資料進行求和運算 (結果浮點數)(對比內置sum)

lst = [1,2,3,4]
res = math.fsum(lst)
print(res)

 

圓周率常數 pi ***

print(math.pi)

 

隨機模塊

random() 獲取隨機0-1之間的小數(左閉右開) 0<=x<1

res = random.random()
print(res)

 

randrange() 隨機獲取指定范圍內的整數(包含開始值,不包含結束值,間隔值) ***

# 一個引數
res = random.randrange(3)
print(res) # 0 1 2 

# 二個引數
res = random.randrange(3,6) # 3 4 5
print(res)

# 三個引數
res = random.randrange(1,9,4) # 1 5 
print(res)

res = random.randrange(7,3,-1) # 7 6 5 4
print(res)

 

randint()   隨機產生指定范圍內的隨機整數 (了解)

res = random.randint(1,3) # 1 2 3
# res = random.randint(3,5,1)  error
print(res)

 

uniform() 獲取指定范圍內的隨機小數(左閉右開)  ***

res = random.uniform(0,2) # 0<= x < 2
print(res)
res = random.uniform(2,0)
print(res)

"""
原碼決議:
a = 2 , b = 0
return 2 + (0-2) * (0<=x<1)
x = 0 return 2 取到
x = 1 return 0 取不到
0 < x <= 2
return a + (b-a) * self.random()
"""

 

choice()  隨機獲取序列中的值(多選一)  **

lst = ["孫凱喜","王永飛","于朝志","須臾間","含稅小"]
res = random.choice(lst)
print(res)

def mychoice(lst):
    index_num = random.randrange(len(lst))
    return lst[index_num]
print(mychoice(lst))

# lambda 改造
mychoice = lambda lst : lst[   random.randrange(len(lst))     ]
print(mychoice(lst))

 

sample()  隨機獲取序列中的值(多選多) [回傳串列] **

tup = ("孫凱喜","王永飛","于朝志","須臾間","含稅小")
res = random.sample(tup,3)
print(res)

 

shuffle() 隨機打亂序列中的值(直接打亂原序列) **

lst = ["孫凱喜","王永飛","于朝志","須臾間","含稅小"]
random.shuffle(lst)
print(lst)

 

驗證碼效果

# 驗證碼里面有大寫字母 65 ~ 90
# 小寫字母 97 ~ 122
# 數字     0 ~ 9
def yanzhengma():
    strvar = ""
    for i in range(4):
        # 大寫字母
        b_c = chr(random.randrange(65,91))
        # 小寫字母
        s_c = chr(random.randrange(97,123))
        # 數字
        num = str(random.randrange(10))
        # 把可能出現的資料都放到串列中,讓系統抽一個
        lst = [b_c,s_c,num]
        # 抽完之后累計拼接在字串strvar當中
        strvar += random.choice(lst)
    # 回圈四次拼接終止,回傳隨機碼
    return strvar
    
res = yanzhengma()
print(res)

 

pickle 序列化/反序列化模塊

import pickle

 

序列化: 把不能夠直接存盤在檔案中的資料變得可存盤
反序列化: 把存盤在檔案中的資料拿出來恢復成原來的資料型別

php
  serialize
  unserialize

把所有的資料型別都通過pickle模塊進行序列化

lst = [1,2,3]
# 錯誤案例, 檔案不能直接存盤容器 , 檔案只能存盤字串和位元組流
"""
with open("lianxi1.txt",mode="w",encoding="utf-8") as fp:
    fp.write(1)
"""

dumps 把任意物件序列化成一個bytes

res = pickle.dumps(lst)
print(res , type(res))

函式可以序列化么? 可以

def func():
    print("我是func函式")
res = pickle.dumps(func)
print(res , type(res))

迭代器可以序列化么? 可以

it = iter(range(10))
res = pickle.dumps(it)
print(res , type(res))

loads 把任意bytes反序列化成原來資料

res2 = pickle.loads(res)
print(res2 , type(res2))

dump  把物件序列化后寫入到file-like Object(即檔案物件)

lst = [1,2,3]
with open("lianxi1.txt",mode="wb") as fp:
    pickle.dump(lst,fp)

load  把file-like Object(即檔案物件)中的內容拿出來,反序列化成原來資料

with open("lianxi1.txt",mode="rb") as fp:
    res2 = pickle.load(fp)
print(res2 , type(res2))

dumps 和 loads 對檔案進行寫入讀取位元組流操作

# 寫入位元組流
with open("lianxi2.txt",mode="wb+") as fp:
    res1 = pickle.dumps(lst)
    fp.write(res1)

# 讀取位元組流
with open("lianxi2.txt",mode="rb+") as fp:
    bytes_str = fp.read()
    res = pickle.loads(bytes_str)
print(res , type(res2))

 

json 序列化/反序列化模塊

json格式的資料,所有的編程語言都能識別,本身是字串
型別有要求: int float bool str list tuple dict None

json 主要應用于傳輸資料 , 序列化成字串
pickle 主要應用于存盤資料 , 序列化成二進制位元組流

 

json 基本用法

json =>  dumps 和 loads

ensure_ascii=False 顯示中文 sort_keys=True 按鍵排序

dic = {"name":"梁新宇","sex":"野味","age":22,"family":["爸爸","媽媽","姐姐"]}
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(res , type(res))

dic = json.loads(res)
print(dic , type(dic))

json => dump 和 load

with open("lianxi3.json",mode="w",encoding="utf-8") as fp:
    json.dump(dic,fp,ensure_ascii=False)
with open("lianxi3.json",mode="r",encoding="utf-8") as fp:
    dic = json.load(fp)
print(dic , type(dic))

 

json 和 pickle 之間的區別

1.json

json 連續dump資料 , 但是不能連續load資料  , 是一次性獲取所有內容進行反序列化.

dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}
with open("lianxi4.json",mode="w",encoding="utf-8") as fp:
    json.dump(dic1,fp)
    fp.write("\n")
    json.dump(dic2,fp)
    fp.write("\n")

# 不能連續load,是一次性獲取所有資料 , error
"""
with open("lianxi4.json",mode="r",encoding="utf-8") as fp:
    dic = json.load(fp)
"""

# 解決辦法 loads(分開讀取)
with open("lianxi4.json",mode="r",encoding="utf-8") as fp:
    for line in fp:
        dic = json.loads(line)
        print(dic,type(dic))

2.pickle

"""
with open("lianxi5.pkl",mode="rb") as fp:
    dic1 = pickle.load(fp)
    dic2 = pickle.load(fp)
    print(dic1)
    print(dic2)
"""
# 方法二 (擴展)
"""try .. except .. 把又可能報錯的代碼放到try代碼塊中,如果出現例外執行except分支,來抑制報錯"""
# 一次性拿出所有load出來的檔案資料
try:
    with open("lianxi5.pkl",mode="rb") as fp:
        
        while True:
            dic = pickle.load(fp)
            print(dic)
except:
    pass

 

json 和 pickle 兩個模塊的區別:

(1)json序列化之后的資料型別是str,所有編程語言都識別,
  但是僅限于(int float bool)(str list tuple dict None)
  json不能連續load,只能一次性拿出所有資料
(2)pickle序列化之后的資料型別是bytes,用于資料存盤
  所有資料型別都可轉化,但僅限于python之間的存盤傳輸.
  pickle可以連續load,多套資料放到同一個檔案中

 

time 時間模塊

 

time()          獲取本地時間戳

res = time.time()
print(res)

 

localtime <=> mktime => ctime

localtime()     獲取本地時間元組          (引數是時間戳,默認當前)

# 默認當前時間元組
ttp = time.localtime()
print(ttp)

# 指定具體的時間戳
ttp = time.localtime(1601360000)
print(ttp)

mktime()        通過時間元組獲取時間戳    (引數是時間元組)

res1 = time.mktime(ttp)
print(res1)

ctime()         獲取本地時間字串(引數是時間戳,默認當前)

# 默認當前時間戳
res = time.ctime()
print(res)

# 指定具體的時間戳
res = time.ctime(res1)
print(res)

asctime()       通過時間元組獲取時間字串(引數是時間元組) (了解)

只能通過手動的形式來調星期

ttp = (2020,9,29,16,48,30,0,0,0)
res = time.asctime(ttp)
print(res)

mktime 配合 ctime來取代asctime (推薦)

自動識別當前是周幾

res = time.mktime(ttp)
strvar = time.ctime(res)
print(strvar)

sleep()         程式睡眠等待

time.sleep(10)
print("我睡醒了")

strftime()      格式化時間字串(格式化字串,時間元祖)

linux支持中文 windows不支持

strvar = time.strftime("%Y-%m-%d %H:%M:%S")
strvar = time.strftime("%Y-%m-%d %H:%M:%S 是杜蘭特的死神的生日")
print(strvar)

strvar = time.strftime("%Y-%m-%d %H:%M:%S",(2020,10,31,10,10,10,0,0,0))
print(strvar)

strptime()      將時間字串通過指定格式提取到時間元組中(時間字串,格式化字串)

注意:替換時間格式化標簽時,必須嚴絲合縫.不能隨便加空格或特殊字符

ttp = time.strptime("2020年的9月29號是死神杜蘭特的生日,晚上20點30分40秒準備轟趴派隊","%Y年的%m月%d號是死神杜蘭特的生日,晚上%H點%M分%S秒準備轟趴派隊")
print(ttp)

 

strftime : 把時間元組 => 字串
strptime : 把字串 => 時間元組

 

perf_counter()  用于計算程式運行的時間 (了解)

# startime = time.perf_counter()
startime = time.time()
for i in range(10000000):
    pass    
# endtime = time.perf_counter()
endtime = time.time()
print("中間用時:",endtime-startime)

 

zipfile 壓縮模塊

import zipfile

(1) 壓縮檔案

zipfile.ZIP_DEFLATED 壓縮減少空間

# 創建壓縮包
zf = zipfile.ZipFile("ceshi111.zip","w",  zipfile.ZIP_DEFLATED)
# 寫入檔案
'''write(路徑,別名)'''
zf.write("/bin/bash","bash")
zf.write("/bin/bunzip2","bunzip2")
zf.write("/bin/cat","tmp/cat")
# 關閉檔案
zf.close()

 

(2) 解壓檔案

zf = zipfile.ZipFile("ceshi111.zip","r")
# 解壓單個檔案
"""extract(檔案,路徑)"""
# zf.extract("bash","ceshi111")
# 解壓所有檔案
zf.extractall("ceshi222")
zf.close()

 

(3) 追加檔案

zf = zipfile.ZipFile("ceshi111.zip","a", zipfile.ZIP_DEFLATED)
zf.write("/bin/chmod","chmod")
zf.close()

# 用with來簡化操作
with zipfile.ZipFile("ceshi111.zip","a", zipfile.ZIP_DEFLATED) as zf:
    zf.write("/bin/chmod","chmod123456")

 

(4) 查看檔案

with zipfile.ZipFile("ceshi111.zip","r") as zf:
    lst = zf.namelist()    
    print(lst)

 

進度條

import time
"""
[###################################] 100%
[##############                     ] 40%
[#############################      ] 80%
"""
# (1) 定義進度條樣式
"""
print("[%-50s]" % ("#"))
print("[%-50s]" % ("######################"))
print("[%-50s]" % ("##############################################"))
"""

# (2) 讓進度條動起來
"""
strvar = ""
for i  in range(50):
    time.sleep(0.1)
    strvar += "#"
    print("\r[%-50s]" % (strvar) , end="")
"""

# (3) 加上百分比
# 顯示進度條
def myprocess(percent):
    if percent > 1:
        percent = 1
    
    # 列印對應的#號數量 * "#" => 字串#號效果
    strvar = int(percent * 50) * "#"
    # 進行列印 %% => % 
    print("\r[%-50s] %d%%" % (strvar , percent * 100) , end="")

# 接受資料
recv_size = 0
total_size = 1000
while recv_size < total_size:
    time.sleep(0.01)
    recv_size += 10
    
    percent = recv_size/total_size # 0.5 
    myprocess(percent)

 

 os 模塊

import os

system()  在python中執行系統命令

os.system("ifconfig")  # linux
# os.system("ipconfig") windows
# os.system("rm -rf ceshi.txt")

popen()   執行系統命令回傳物件,通過read方法讀出字串

obj = os.popen("ipconfig")
print(obj)
print(obj.read())

listdir() 獲取指定檔案夾中所有內容的名稱串列 ***

lst = os.listdir()
print(lst)

getcwd()  獲取當前檔案所在的默認路徑 ***

# 路徑
res = os.getcwd()
print(res)

# 路徑 + 檔案名 ***
print(__file__)

chdir()   修改當前檔案作業的默認路徑

os.chdir("/home/wangwen/mywork")
os.system("touch 2.txt")

environ   獲取或修改環境變數

"""
[windows]
(1)右鍵qq屬性找路徑
(2)右鍵我的電腦屬性->高級系統設定->環境變數->path 打開環境變數添加對應路徑
(3)cmd => QQScLauncher

[linux]
(1)在家目錄中創建個檔案夾,里面創建個檔案wangwen,寫入ifconfig
(2)增加wangwen的可執行權限 chmod 777 wangwen 測驗一下 sudo ./wangwen
(3)添加環境變數在os.environ["PATH"] 中拼接wangwen所有的絕對路徑
(4)os.system("wangwen")

總結: 環境變數path的好處是,讓系統自動的找到該命令的實際路徑進行執行;
"""
print(os.environ["PATH"])
"""
environ(
{ 一堆路徑}
)
"""
os.environ["PATH"] += ":/home/wangwen/mywork"
os.system("wangwen")

--os 模塊屬性

name 獲取系統標識  linux,mac ->posix      windows -> nt

print(os.name)

sep 獲取路徑分割符號  linux,mac -> /       window-> \ ***

print(os.sep)

linesep 獲取系統的換行符號  linux,mac -> \n    window->\r\n 或 \n

print(repr(os.linesep))

 

os 模塊 (檔案操作) 新建/洗掉/ 

import os
os.chdir("/路徑/路徑/路徑")

-- os模塊具有 新建/洗掉/

os.mknod   創建檔案

os.mknod("1.txt")

os.remove  洗掉檔案

os.remove("1.txt")

os.mkdir   創建目錄(檔案夾)

os.mkdir("ceshi111")

os.rmdir   洗掉目錄(檔案夾)

os.rmdir("ceshi111")

os.rename  對檔案,目錄重命名

os.rename("2.txt","3.txt")

os.makedirs   遞回創建檔案夾

os.makedirs("a/b/c/d/e/f")

os.removedirs 遞回洗掉檔案夾(空檔案夾)

os.removedirs("a/b/c/d/e/f")

 

shutil模塊 復制/移動/

import shutil

copyfileobj(fsrc, fdst[, length=16*1024])  復制檔案 (length的單位是字符(表達一次讀多少字符/位元組))

fp_src = https://www.cnblogs.com/shuaiyao666/p/open("3.txt",mode="r",encoding="utf-8")
fp_dst = open("4.txt",mode="w",encoding="utf-8")
shutil.copyfileobj(fp_src,fp_dst)

copyfile(src,dst)   #單純的僅復制檔案內容 , 底層呼叫了 copyfileobj

shutil.copyfile("4.txt","5.txt")

copymode(src,dst)   #單純的僅復制檔案權限 , 不包括內容  (虛擬機共享目錄都是默認777)

注意: 要先有兩個檔案才可以,不會默認創建

copystat(src,dst)   #復制所有狀態資訊,包括權限,組,用戶,修改時間等,不包括內容

shutil.copystat("4.txt","5.txt")

copy(src,dst)       #復制檔案權限和內容

shutil.copy("5.txt","6.py")

copy2(src,dst)      #復制檔案權限和內容,還包括權限,組,用戶,時間等

shutil.copy2("5.txt","7.py")

copytree(src,dst)   #拷貝檔案夾里所有內容(遞回拷貝)

shutil.copytree("lianxi","lianxi2")

rmtree(path)        #洗掉當前檔案夾及其中所有內容(遞回洗掉)

shutil.rmtree("lianxi2")

move(path1,paht2)   #移動檔案或者檔案夾

# shutil.move("7.py","lianxi/888.php")
shutil.move("7.py","/888.php")

 

 

os.path 路徑模塊

import os

pathvar = "/home/wangwen/mywork/ceshi.py"
pathvar = __file__

basename() 回傳檔案名部分

res = os.path.basename(pathvar)
print(res)

dirname()  回傳路徑部分

res = os.path.dirname(pathvar)
print(res)

split() 將路徑拆分成單獨的檔案部分和路徑部分 組合成一個元組

print(os.path.split(__file__))

join()  將多個路徑和檔案組成新的路徑 可以自動通過不同的系統加不同的斜杠  linux / windows\ ***

path1 = "home"
path2 = "wangwen"
path3 = "mywork"
pathvar = path1 + os.sep + path2 + os.sep + path3
print(pathvar)

# 用join改造
path_new = os.path.join(path1,path2,path3)
print(path_new)

splitext() 將路徑分割為后綴和其他部分 (了解)

pathvar = "/home/wangwen/mywork/ceshi.py"
print(  os.path.splitext(pathvar)  )
print(  pathvar.split(".")[-1]  )

getsize()  獲取檔案的大小  ***

# pathvar = os.path.dirname(__file__) # 方法一
pathvar = os.getcwd() # 方法二
path_new = os.path.join(pathvar,"2.py")
print(path_new)

計算檔案大小

res = os.path.getsize(path_new)
print(pathvar)
res = os.path.getsize("/mnt/hgfs/python32_gx/day14")
print(res)

 

isdir()    檢測路徑是否是一個檔案夾  ***

res = os.path.isdir("/mnt/hgfs/python32_gx/day14")
print(res)

isfile()   檢測路徑是否是一個檔案    ***

res = os.path.isfile("/mnt/hgfs/python32_gx/day16/1.py")
print(res)

islink()   檢測路徑數否是一個鏈接

res = os.path.islink("/home/wangwen/mywork/1122.py")
print(res)

 

 

getctime() [windows]檔案的創建時間,[linux]權限的改動時間(回傳時間戳)

import time

 

import time
res = os.path.getctime("/home/wangwen/mywork/4.txt")

 

getmtime() 獲取檔案最后一次修改時間(回傳時間戳)

res = os.path.getmtime("/home/wangwen/mywork/4.txt")

getatime() 獲取檔案最后一次訪問時間(回傳時間戳)

res = os.path.getatime("/home/wangwen/mywork/4.txt")
print(res)
print(time.ctime(res))

exists()   檢測指定的路徑是否存在 ***

res = os.path.exists("/home/wangwen/mywork/4.txt")
# res = os.path.exists("4.txt")

isabs()    檢測一個路徑是否是絕對路徑

res = os.path.isabs("2.py")
print(res)

abspath()  將相對路徑轉化為絕對路徑

res = os.path.abspath("2.py")
print(res)

pathvar = "2.py"
if not os.path.isabs(pathvar):
    abs_path = os.path.abspath("2.py")
print(abs_path)

 

tarfile 壓縮模塊

import tarfile

(1) 壓縮檔案

1.只是單純的打包.

# 創建壓縮包
tf = tarfile.open("ceshi0930_0.tar","w",encoding="utf-8")
# 寫入檔案
"""add(路徑,別名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 關閉檔案
tf.close() # 378880

2.使用gz演算法壓縮

tf = tarfile.open("ceshi0930_1.tar.gz","w:gz",encoding="utf-8")
# 寫入檔案
"""add(路徑,別名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 關閉檔案
tf.close() # 180413

3.使用bz2演算法壓縮

tf = tarfile.open("ceshi0930_2.tar.bz2","w:bz2",encoding="utf-8")
# 寫入檔案
"""add(路徑,別名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 關閉檔案
tf.close() # 163261

(2) 解壓檔案

tf = tarfile.open("ceshi0930_1.tar.gz","r",encoding="utf-8")
""" extract(檔案,路徑) 解壓單個檔案"""
tf.extract("chown","ceshi0930_1")
""" extract(路徑) 解壓所有檔案"""
tf.extractall("ceshi0930_1_2")
tf.close()

(3) 追加檔案

對已經壓縮過的包無法進行追加檔案,只能是沒有壓縮過的包進行追加檔案

tf = tarfile.open("ceshi0930_0.tar","a",encoding="utf-8")
tf.add("/bin/mkdir","mkdir")
tf.close()

# 使用with進行改造
with tarfile.open("ceshi0930_0.tar","a",encoding="utf-8") as tf:
    tf.add("/bin/mkdir","mkdir234")

 

(4) 查看檔案

with tarfile.open("ceshi0930_0.tar","r",encoding="utf-8") as tf:
    lst = tf.getnames()
    print(lst)

 

追加檔案到壓縮包中在壓縮

import os,shutil
"""
1.把已經壓縮的包進行解壓
2.把要追加的內容放進去
3.過濾檔案重新壓縮
"""
# 記錄壓縮包所在的絕對路徑
pathvar1 = os.path.abspath("ceshi0930_2.tar.bz2")
# 要解壓到哪個檔案夾中(絕對路徑)
pathvar2 = os.path.join(  os.getcwd() , "ceshi0930_2"  )
print(pathvar1)# /mnt/hgfs/python32_gx/day16/ceshi0930_2.tar.bz2
print(pathvar2)# /mnt/hgfs/python32_gx/day16/ceshi0930_2

# 1.把已經壓縮的包進行解壓
with tarfile.open(pathvar1,"r",encoding="utf-8") as tf:
    tf.extractall(pathvar2)

# 2.把要追加的內容放進去
shutil.copy("/bin/echo" , pathvar2)

# 3.過濾檔案重新壓縮

# 查看檔案夾當中有什么檔案
lst = os.listdir(pathvar2)
print(lst) # ['chown', 'cp', 'echo', 'tmp']

with tarfile.open(pathvar1,"w:bz2",encoding="utf-8") as tf:
    for i in lst:
        if i != "chown":
            # 拼湊成完整的絕對路徑
            abs_path = os.path.join(pathvar2,i)
            # 剩下的都要壓縮
            """add(路徑,別名)"""
            tf.add(abs_path,i)
"""
    /mnt/hgfs/python32_gx/day16/ceshi0930_2/chown
    /mnt/hgfs/python32_gx/day16/ceshi0930_2/cp
    /mnt/hgfs/python32_gx/day16/ceshi0930_2/echo    
    tf.add("/bin/chown","chown")
"""

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439135.html

標籤:Python

上一篇:Java 雜記

下一篇:python函式快查快用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more