19. Python之常用模塊

1. time模塊

1.1 time的格式

三種格式:
1. 時(shí)間戳
2. 按照某種格式顯示的時(shí)間
3. 結(jié)構(gòu)化的時(shí)間
時(shí)間戳: 從1970年到代碼執(zhí)行時(shí)間點(diǎn)期間經(jīng)歷過的秒數(shù), 調(diào)用time.time()

import time
print(time.time())
>> 1612284368.302347
格式化顯示時(shí)間: 調(diào)用time.strftime()

import time
print(time.strftime('%Y-%m-%d %H:%M:%S'))
>> 2021-02-03 00:48:35
結(jié)構(gòu)化時(shí)間: 調(diào)用time.localtime()

import time
print(time.localtime()) # time.localtime()顯示當(dāng)前時(shí)間的具體信息
>> time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=0, tm_min=52, tm_sec=34, tm_wday=2, tm_yday=34, tm_isdst=0)

# 可以賦值給變量, 然后通過變量名.key去獲得value
import time
info = time.localtime()
print(info.tm_year)
>> 2021
print(info.tm_mon)
>> 2

1.2 不同格式的應(yīng)用場(chǎng)景

1. 時(shí)間戳: 用于時(shí)間間隔的計(jì)算
2. 格式化顯示時(shí)間: 按照某種格式展示
3. 結(jié)構(gòu)化時(shí)間: 用于單獨(dú)獲取當(dāng)前時(shí)間的某部分的value

1.3 不同格式之間的轉(zhuǎn)換

1. 結(jié)構(gòu)化時(shí)間 ---time.mktime(結(jié)構(gòu)化時(shí)間)---> 時(shí)間戳格式 

import time

print(time.localtime())
>> time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=1, tm_min=19, tm_sec=47, tm_wday=2, tm_yday=34, tm_isdst=0)
timestamp=time.localtime()
print(time.mktime(timestamp))
>> 1612286387.0
2. 時(shí)間戳 ---time.localtime(時(shí)間戳)---> 結(jié)構(gòu)化時(shí)間

import time

s_time = time.time()
print(s_time)
>> 1612286616.320777
print(time.localtime(s_time))
>> time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=1, tm_min=23, tm_sec=36, tm_wday=2, tm_yday=34, tm_isdst=0)
3. 結(jié)構(gòu)化時(shí)間 ---time.strftime()---> 格式化字符串時(shí)間

import time

l_time = time.localtime()
print(l_time)
>> time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=1, tm_min=32, tm_sec=29, tm_wday=2, tm_yday=34, tm_isdst=0)
print(time.strftime('%Y-%m-%d %H:%M:%S',l_time))
>> 2021-02-03 01:32:29
4. 格式化字符串時(shí)間 ---time.strptime()---> 結(jié)構(gòu)化時(shí)間

import time

f_time = time.strftime('%Y-%m-%d %H:%M:%S')
print(f_time)
>> 2021-02-03 01:35:04
s_time = time.strptime(f_time, '%Y-%m-%d %H:%M:%S')
print(s_time)
>> time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=1, tm_min=35, tm_sec=4, tm_wday=2, tm_yday=34, tm_isdst=-1)
注意: 格式化字符串的時(shí)間格式與時(shí)間戳不能直接轉(zhuǎn)換, 需要通過結(jié)構(gòu)化時(shí)間進(jìn)行轉(zhuǎn)換
案例: 假設(shè)當(dāng)前時(shí)間為'1990-07-10 10:10:10', 如果計(jì)算7天后的時(shí)間

實(shí)現(xiàn)過程: 把格式化時(shí)間 > 轉(zhuǎn)成結(jié)構(gòu)化時(shí)間 > 時(shí)間戳 >  進(jìn)行時(shí)間運(yùn)算 >  轉(zhuǎn)回時(shí)間戳 > 轉(zhuǎn)回格式化時(shí)間

import time

f_time = '1990-07-10 10:10:10'

# 第一步: 格式化字符串時(shí)間, 轉(zhuǎn)成結(jié)構(gòu)化時(shí)間
s_time = time.strptime(f_time,'%Y-%m-%d %H:%M:%S')
print(s_time)  # >> time.struct_time(tm_year=1990, tm_mon=7, tm_mday=10, tm_hour=10, tm_min=10, tm_sec=10, tm_wday=1, tm_yday=191, tm_isdst=-1)

# 第二步: 結(jié)構(gòu)化時(shí)間, 轉(zhuǎn)成時(shí)間戳

time_stamp = time.mktime(s_time)
print(time_stamp)  # >> 647575810.0

# 第三步: 時(shí)間戳+7天

new_time_stamp = time_stamp + 7 * 86400
print(new_time_stamp)  # >> 648180610.0

# 第四步: 將新的時(shí)間戳, 轉(zhuǎn)換成新的結(jié)構(gòu)化格式

new_s_time = time.localtime(new_time_stamp)
print(new_s_time) # >> time.struct_time(tm_year=1990, tm_mon=7, tm_mday=17, tm_hour=10, tm_min=10, tm_sec=10, tm_wday=1, tm_yday=198, tm_isdst=0)

# 第五步: 將新的結(jié)構(gòu)化格式, 轉(zhuǎn)成最終的新的格式化字符串格式

new_f_time = time.strftime('%Y-%m-%d %H:%M:%S',new_s_time)
print(new_f_time) # >> 1990-07-17 10:10:10

# 結(jié)果
# '1990-07-10 10:10:10' ---> '1990-07-17 10:10:10'

1.4 time模塊支持的其他格式

import time

print(time.asctime())
>> Wed Feb  3 02:06:54 2021 

2. datetime模塊

2.1 用于獲取當(dāng)前時(shí)間

import datetime
print(datetime.datetime.now())
>> 2021-02-03 01:08:12.385710 # 注意: datatime獲取時(shí)間的結(jié)果是datetime對(duì)象而不是字符串

2.2 進(jìn)行時(shí)間的運(yùn)算(主要的作用)

案例1: 計(jì)算5天后的時(shí)間

import datetime
print(datetime.datetime.now())
>> 2021-02-03 01:10:46.131210
print(datetime.datetime.now()+datetime.timedelta(days=5))  # days=5表示5天后
>> 2021-02-08 01:10:46.131210
案例2: 計(jì)算3天前的時(shí)間

import datetime
print(datetime.datetime.now())
>> 2021-02-03 01:11:56.062510
print(datetime.datetime.now()+datetime.timedelta(days=-3)) # days=-3表示3天前
>> 2021-01-31 01:11:56.062510
注意: datetime進(jìn)行時(shí)間的運(yùn)算不支持年, 沒有此功能, 不過可以用days=365*3(計(jì)算3年后的時(shí)間)來代替

2.3 時(shí)間戳轉(zhuǎn)成格式化字符串格式

好處: 一步到位
缺點(diǎn): 無法指定格式化的格式

import datetime, time
s_time = time.time()
print(s_time) # >> 1612289400.193677
print(datetime.datetime.fromtimestamp(s_time)) # >> 2021-02-03 02:10:00.193677

3. random模塊

取隨機(jī)值
import random

print(random.random()) # 0-1之內(nèi)的小數(shù), 開區(qū)間
>> 0.4848350985621943
print(random.uniform(1,3)) # m,n, 指定范圍內(nèi)的小數(shù), 開區(qū)間
>> 2.4436476444386885
print(random.randint(1,3)) # 閉區(qū)間
>> 3
print(random.randrange(1,3)) # 左閉又開
>> 2
print(random.choice([1,2,[3,4],'a'])) # choice()中放一個(gè)列表, 每次會(huì)從列表中隨機(jī)取出一個(gè)元素
>> 1
print(random.sample([1,2,3,[11,22]],2)) # sample()放一個(gè)列表, 每次按照后面指定的數(shù)字, 從列表中隨機(jī)取出2個(gè)元素, 并且以列表格式返回, 注意, sample()必須指定隨機(jī)取出值的個(gè)數(shù)
>> [3, 2]
list1 = [1,2,3,4,5]
print(random.shuffle(list1)) # random.shuffle()會(huì)將列表順序隨機(jī)打亂, 并且會(huì)修改源列表
print(list1)
>> [2, 5, 3, 1, 4]

案例: 生成隨機(jī)驗(yàn)證碼, 6位大寫字母和數(shù)字的組合

import random

res = '' # 初始化一個(gè)空字符串
for i in range(6): # 6為隨機(jī)字符串, 所以循環(huán)6次, 每次從大寫字母和數(shù)字中隨機(jī)random.choice()取出來一個(gè), 和res做拼接
    alpha = chr(random.randint(65,90)) # chr('數(shù)字'), 將對(duì)應(yīng)的數(shù)字按照ASCII表的順序轉(zhuǎn)成字符串, 大寫字母范圍是65-90, 所以random.randint()取出一個(gè)數(shù)字, 然后轉(zhuǎn)成字符串
    num = str(random.randint(0,9)) # str(), 將數(shù)字轉(zhuǎn)成字符格式, 因?yàn)樽址荒芎妥址唇? 不能和數(shù)字拼接
    alnum = random.choice([alpha,num]) # 得到隨機(jī)的大寫字母和數(shù)字, 加入到random.choice(), 每次隨機(jī)取出一個(gè), 和res拼接
    res += alnum
print(res)

4. os模塊

4.1 os.getcwd()

os.getcwd() --> 獲取當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑
import os
dir = os.getcwd()
print(dir)
>> C:\Users\David\PycharmProjects\pythonProject\模塊

4.2 os.chdir()

os.chdir() --> 改變當(dāng)前腳本工作目錄;相當(dāng)于shell下cd
os.chdir(r"C:\Users\David\PycharmProjects\pythonProject\練習(xí)")
print(os.getcwd())
>> C:\Users\David\PycharmProjects\pythonProject\練習(xí)

4.3 os.makedirs('dirname1/dirname2')

os.makedirs('dirname1/dirname2') --> 生成多層遞歸目錄, 支持絕對(duì)路徑和相對(duì)路徑

4.4 os.curdir 和 os.pardir

import os

print(os.curdir) >> .  # 返回 '.', 表示當(dāng)前工作目錄
print(os.pardir) >> ..  # 返回, '..', 表示上級(jí)工作目錄

4.5 os.removedirs('dir')

os.removedirs('dirname1')   -->  若目錄為空,則刪除,并遞歸到上一級(jí)目錄,如若也為空,則刪除,依此類推

4.6 os.mkdir('dirname')

os.mkdir('dirname')  -->   生成單級(jí)目錄;相當(dāng)于shell中mkdir dirname

4.7 os.rmdir('dirname')

os.rmdir('dirname')   -->  刪除單級(jí)空目錄,若目錄不為空則無法刪除,報(bào)錯(cuò)

4.8 os.listdir('dirname')

os.listdir('dirname')  -->   列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印
import os
print(os.listdir(r'C:\Users\David\PycharmProjects\pythonProject\s14\模塊'))
>> ['os模塊.py', 'random模塊.py', 'time模塊.py', '__pycache__', '練習(xí).py']
print(os.listdir('.'))

案例: 統(tǒng)計(jì)一個(gè)目錄的大小

1. os.listdir, 列出目標(biāo)目錄的子目錄和文件
2. 從上一步結(jié)果的列表, for循環(huán)取值, 每一進(jìn)行判斷, 取出來的是目錄還是文件, 如果是文件, 直接os.path.getsize()取文件大小, 然后加到sum求和
3. 如果是目錄, 則遞歸執(zhí)行os.listdir

#! /usr/bin/python3                                                                                                                                                                 
  

import os


target=os.getcwd()
def get_size(target):
    dir = os.listdir(target)

    sum_size = 0
    for item in dir:
        j = '{target}/{item}'.format(target=target,item=item)
        if os.path.isfile(j):
            res = os.path.getsize(j)
            sum_size += res
        else:
            sum_size += get_size(j)
    return sum_size

info = get_size(target)
print(info)

4.9 os.remove()

os.remove()  -->  刪除一個(gè)文件

4.10 os.rename("oldname","newname")

os.rename("oldname","newname")  --> 重命名文件/目錄

4.11 os.stat('path/filename')

os.stat('path/filename')  -->  獲取文件/目錄信息

4.12 os.system("bash command")

os.system("bash command") -->  運(yùn)行shell命令,具體要看Python運(yùn)行在什么平臺(tái)

4.13 os.environ

os.environ  --> 獲取系統(tǒng)環(huán)境變量
結(jié)果是字典格式, 并且key和value都是字符串
在整個(gè)程序任何地方都能獲取到的變量
添加變量到environ

import os
env = os.environ
env['username']='admin'
print(env)
>> 'USERNAME': 'admin'
用途: 程序運(yùn)行中, 某個(gè)代碼片段產(chǎn)生了一個(gè)變量, 并且希望這個(gè)變量也能被其他文件中的代碼訪問到, 那么就可以把這個(gè)變量加入到environ中
比如, 一個(gè)用戶登錄, 那么在登錄的運(yùn)行文件中, 可以獲取用戶名字, 這時(shí)如果其他的文件也要調(diào)用這個(gè)用戶名, 那么可以把用戶名添加到系統(tǒng)環(huán)境變量里

4.14 os.path.abspath(path)

os.path.abspath(path)  --> 返回path規(guī)范化的絕對(duì)路徑
import os
print(__file__)
>> C:/Users/David/PycharmProjects/pythonProject # Pycharm顯示
print(os.path.abspath(__file__))
>> C:\Users\David\PycharmProjects\pythonProject # Windows規(guī)范

4.15 獲取文件的dirname和basename

import os
print(os.path.dirname(r'a/b/c/d.txt')) >> a/b/c
print(os.path.basename(r'a/b/c/d.txt')) >> d.txt
os.path.split(path)

import os
print(os.path.split(r'a/b/c/d.txt'))
>> ('a/b/c', 'd.txt') # 結(jié)果以元組形式返回

4.16 目錄和文件的判斷

os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是絕對(duì)路徑,返回True
os.path.isfile(path)  如果path是一個(gè)存在的文件,返回True。否則返回False
os.path.isdir(path)  如果path是一個(gè)存在的目錄,則返回True。否則返回False

4.17 os.path.join(path1[, path2[, ...]])

os.path.join(path1[, path2[, ...]])  --> 將多個(gè)路徑組合后返回,第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略
import os
print(os.path.join('a','b','c','d.txt'))
>> a\b\c\d.txt

4.18 os.path.normpath()

os.path.normpath() --> 規(guī)范化路徑
import os
print(os.path.normpath('a/b/c/d/../..'))
>> a\b
獲取一個(gè)路徑的上上級(jí)目錄

import os
print(os.path.dirname(os.path.dirname('a/b/c/d'))) # Python2和Python3通用
>> a/b

4.19 pathlib模塊

Python3.5以后推出的用來處理路徑的模塊
或者父級(jí)目錄

from pathlib import Path

dir = Path(__file__)
par = dir.parent.parent.parent
print(par)
>> C:\Users\David\PycharmProjects\pythonProject
路徑拼接

from pathlib import Path

dir1 = Path('a/b/c')
dir2 = 'd/e.txt'
print(dir1 / dir2)
>> a\b\c\d\e.txt

5 sys模塊

5.1 sys.argv

在程序中接收?qǐng)?zhí)行程序時(shí)傳入的參數(shù), 類似Shell的位置參數(shù)
sys.argv 表示所有參數(shù), 包括程序文件本身, 結(jié)果為一個(gè)列表
C:\Users\David\PycharmProjects\pythonProject\模塊\sys模塊.py

import sys
print(sys.argv)
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
C:\Users\David\PycharmProjects\pythonProject\模塊>python38 sys模塊.py 1 2 3
['sys模塊.py', '1', '2', '3']
sys模塊.py
1
2

案例: 文件拷貝程序

import sys

src_file = sys.argv[1]
dest_file = sys.argv[2]
# 中間可以通過條件判斷來顯示輸入的源文件和目標(biāo)文件
with open(r'%s'%(src_file), mode = 'bt') as read_f, \
    open(r'%s'%(dest_file), mode = 'wb') as write_f:
    for line in read_f:
        write_f.write(line)

6 打印進(jìn)度條功能

進(jìn)度條格式:
1. 進(jìn)度條寬度固定
2. 隨著進(jìn)度增加, 百分比隨之增加
[#####                  ] %10
[###########      ] %30
原理:
動(dòng)態(tài)的進(jìn)度條實(shí)際都用每一次打印的靜態(tài)效果模擬出來的
用新的進(jìn)度條替換舊的進(jìn)度條, 因?yàn)樗俣确浅?? 所以肉眼是無法識(shí)別的
[#             ]
[##            ]
[###           ]
[####          ]
1. 實(shí)現(xiàn)固定進(jìn)度條

print('[%-50s]'%('#')) # 50表示進(jìn)度條寬度, "-"左對(duì)齊
>> [#                                                 ]
2. 實(shí)現(xiàn)百分號(hào)

print('[%-50s] %s%%'%('#',100))
>> [#                                                 ] 100%
3. for循環(huán), 實(shí)現(xiàn)每次打印一個(gè)#, 一共打印50次

res = ''
for i in range(50):
    res += '#'
    print('[%-50s]'%(res))
>>
[#                                                 ]
[##                                                ]
[###                                               ]
...
4. 實(shí)現(xiàn)不換行打印

res = ''
for i in range(50):
    res += '#'
    print('[%-50s]'%(res),end='')
>> [#                                                 ][##                                                ]... #此時(shí), 所有的進(jìn)度條都會(huì)在一行打印
5. 實(shí)現(xiàn)每次打印時(shí), 都在行首打印, 替換之前的打印結(jié)果

res = ''
for i in range(50):
    res += '#'
    print('\r[%-50s]'%(res),end='') # \r表示每次都在行首打印
6. 添加打印時(shí)間間隔, 便于觀看輸出效果

import time
res = ''
for i in range(50):
    res += '#'
    print('\r[%-50s]'%(res),end='')
    time.sleep(0.5)
7. 模擬根據(jù)下載進(jìn)度, 實(shí)現(xiàn)進(jìn)度條打印

import time
recv_size = 0 # 初始化接受的數(shù)據(jù)
total_size = 100000 # 數(shù)據(jù)總大小
while recv_size < total_size:
    time.sleep(0.5) # 添加時(shí)間間隔, 每0.5秒下載1024字節(jié), 類似模擬下載速度
    recv_size += 1024 # 模擬每次下載一個(gè)字節(jié)
    print(recv_size)
>> # 此時(shí)執(zhí)行會(huì)一次顯示每次下載后的接受數(shù)據(jù)量的大小
1024
2048
3072
4096
5120
...
8. 通過打印進(jìn)度條顯示下載速度

percent = recv_size / total_size # 每打印進(jìn)度條之前, 計(jì)算接收到的數(shù)據(jù)占總數(shù)據(jù)的百分比
hash_num = int(50 * percent) # 定義寬度為50, 那么最多50個(gè)#, 乘百分比得到每次接受完應(yīng)該顯示#的個(gè)數(shù), 然后用int取整, 因?yàn)榘俜种畷?huì)存在小數(shù)

import time
recv_size = 0 # 初始化接受的數(shù)據(jù)
total_size = 100000 # 數(shù)據(jù)總大小
while recv_size < total_size:
    time.sleep(0.01) # 添加時(shí)間間隔, 每0.5秒下載1024字節(jié), 類似模擬下載速度
    recv_size += 1024 # 模擬每次下載1024個(gè)字節(jié)

    # 打印進(jìn)度條
    percent = recv_size / total_size
    hash_num = int(50 * percent) * '#' # int()后的結(jié)果是應(yīng)該打印的#的個(gè)數(shù), 再*'#'就會(huì)得到n個(gè)#
    print('\r[%-50s]' % (hash_num), end='')
9. 添加百分比顯示

import time
recv_size = 0 # 初始化接受的數(shù)據(jù)
total_size = 100000 # 數(shù)據(jù)總大小
while recv_size < total_size:
    time.sleep(0.01) # 添加時(shí)間間隔, 每0.5秒下載1024字節(jié), 類似模擬下載速度
    recv_size += 1024 # 模擬每次下載1024個(gè)字節(jié)

    # 打印進(jìn)度條
    percent = recv_size / total_size
    hash_num = int(50 * percent) * '#'
    print('\r[%-50s] %d%%' % (hash_num,int(percent*100)), end='')
10. 每次下載數(shù)量的控制

如果總數(shù)量為1025, 而每次接受1024, 那么第一次下載會(huì)下載1024, recv_size變成1024, while循環(huán)條件判斷后, 會(huì)進(jìn)行下一次下載, 再下載1024個(gè)字節(jié)
這樣recv_size就變成了2048個(gè)字節(jié), 那么第二次計(jì)算百分比就超過了總的數(shù)據(jù)量, 變成199%.
因此, 需要控制每次下載的數(shù)量, 防止超出總的范圍

方法1: 每次計(jì)算中百分比后, 對(duì)百分之進(jìn)行判斷, 如果大于1, 那么強(qiáng)項(xiàng)轉(zhuǎn)換成1, 這樣最后一次無論接受了多少數(shù)據(jù), 最后進(jìn)度條輸出的都是100%
方法2: 每次進(jìn)入while循環(huán)后, 再判斷一次total_size和recv_size的差值, 如果差值小于1024, 那么recv_size就+=差值, 如果大于1024, 那么還是+=1024
方法1:

import time
recv_size = 0 # 初始化接受的數(shù)據(jù)
total_size = 1025 # 數(shù)據(jù)總大小
while recv_size < total_size:
    time.sleep(1) # 添加時(shí)間間隔, 每0.5秒下載1024字節(jié), 類似模擬下載速度
    recv_size += 1024 # 模擬每次下載1024個(gè)字節(jié)

    # 打印進(jìn)度條
    percent = recv_size / total_size
    if percent > 1:
        percent = 1
    hash_num = int(50 * percent) * '#'
    print('\r[%-50s] %d%%' % (hash_num,int(percent*100)), end='')
方法2:

import time
recv_size = 0 # 初始化接受的數(shù)據(jù)
total_size = 1025 # 數(shù)據(jù)總大小
while recv_size < total_size:
    time.sleep(1) # 添加時(shí)間間隔, 每0.5秒下載1024字節(jié), 類似模擬下載速度
    diff_size = total_size - recv_size
    if diff_size < 1024:
        recv_size += diff_size
    else:
        recv_size += 1024 # 模擬每次下載1024個(gè)字節(jié)

    # 打印進(jìn)度條
    percent = recv_size / total_size
    hash_num = int(50 * percent) * '#'
    print('\r[%-50s] %d%%' % (hash_num,int(percent*100)), end='')
11. 將打印進(jìn)度條做成功能

import time

def progress(percent):
    hash_num = int(50 * percent) * '#'
    print('\r[%-50s] %d%%' % (hash_num, int(percent * 100)), end='')


recv_size = 0 # 初始化接受的數(shù)據(jù)
total_size = 102500 # 數(shù)據(jù)總大小
while recv_size < total_size:
    time.sleep(0.05) # 添加時(shí)間間隔, 每0.5秒下載1024字節(jié), 類似模擬下載速度
    diff_size = total_size - recv_size
    if diff_size < 1024:
        recv_size += diff_size
    else:
        recv_size += 1024 # 模擬每次下載1024個(gè)字節(jié)

    # 打印進(jìn)度條
    percent = recv_size / total_size
    progress(percent)

7 shutil模塊

用于文件處理
  1. 將文件內(nèi)容拷貝到另一個(gè)文件中
import shutil
shutil.copyfileobj(open('random模塊.py', 'r'), open('random模塊.bak.py', 'w'))
  1. 拷貝文件
shutil.copyfile('f1.log', 'f2.log') # 目標(biāo)文件會(huì)自動(dòng)創(chuàng)建
  1. 只把源文件的權(quán)限拷貝給目標(biāo)文件, 目標(biāo)文件的內(nèi)容, 屬主, 屬組不變
shutil.copymode('f1.log', 'f2.log') #目標(biāo)文件必須存在
  1. 只把源文件的狀態(tài)信息拷貝給目標(biāo)文件, 包括: mode bits, atime, mtime, flags
shutil.copystat('f1.log', 'f2.log') #目標(biāo)文件必須存在
  1. 拷貝文件和權(quán)限
shutil.copy('f1.log', 'f2.log')
  1. 拷貝文件和狀態(tài)信息
shutil.copy2('f1.log', 'f2.log')
  1. 打包, 解包, 壓縮, 解壓縮
將 /data/下的文件打包并壓縮到當(dāng)前程序文件運(yùn)行的目錄
# root_dir表示要打包的路徑
import shutil
shutil.make_archive("data.bak","gztar",root_dir="/data")
解包解壓縮

t=tarfile.open('/tmp/data.tar','r')
t.extractall('/opt')
t.close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一,什么是模塊? 常見的場(chǎng)景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是模塊名字加上.py的...
    100斤的瘦子_湯勇閱讀 499評(píng)論 0 0
  • time模塊 該模塊內(nèi)部使?的時(shí)當(dāng)前平臺(tái)的c庫 每個(gè)平臺(tái)的c庫?持的?法可能略有不同 時(shí)間三種格式 1.時(shí)間戳 2...
    knot98閱讀 289評(píng)論 0 0
  • time模塊 與時(shí)間相關(guān)的功能 常用方法 time.strftime('%Y-%m-%d %X') #格式化獲取當(dāng)...
    aq_wzj閱讀 273評(píng)論 0 1
  • 導(dǎo)入模塊 靜態(tài)導(dǎo)入 (1)import 模塊(2)from 模塊 import 函數(shù):可以選定要導(dǎo)入的函數(shù),逗號(hào)隔...
    dawsonenjoy閱讀 340評(píng)論 0 0
  • Python之模塊 模塊Python模塊(Module),本質(zhì)就是一個(gè)Python文件,以 .py 結(jié)尾,包含了P...
    免跪姓黃閱讀 409評(píng)論 0 3

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