日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python第二十天 shutil 模块 zipfile tarfile 模块

發布時間:2024/1/17 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python第二十天 shutil 模块 zipfile tarfile 模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python第二十天? shutil 模塊? zipfile?? tarfile 模塊

?



os文件的操作還應該包含移動 復制? 打包 壓縮 解壓等操作,這些os模塊都沒有提供


shutil 模塊
shutil.copyfileobj(fsrc, fdst[, length=16*1024])??? #copy文件內容到另一個文件,可以copy指定大小的內容

文件拷貝操作
shutil.copyfile(src,dst)?? #copy文件內容,是不是感覺上面的文件復制很麻煩?還需要自己手動用open函數打開文件,在這里就不需要了,事實上,copyfile調用了copyfileobj
shutil.copymode(src,dst)?? #僅copy權限,不更改文件內容,組和用戶。
shutil.copystat(src,dst)??? #復制所有的狀態信息,包括權限,組,用戶,時間等
shutil.copy(src,dst)?? #復制文件的內容以及權限,先copyfile后copymode


shutil.copy2(src,dst)??? #建議使用這個來拷貝,復制文件的內容以及文件的所有狀態信息。先copyfile后copystat
示例:shutil.copy2('/tmp/123.txt','/tmp/mysql/123.txt')


目錄操作
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)?? #遞歸的復制文件內容及狀態信息,目標目錄不需要預先創建
shutil.rmtree(path, ignore_errors=False, οnerrοr=None)?? #遞歸地刪除文件,不管目錄是否為空都會刪除,建議用這個,不用os.rmdir和os.removedirs
示例

shutil.copytree('/tmp/mysql','/tmp/mysql2') mysql2這個目標目錄不需要預先創建

?




剪切文件操作
shutil.move(src, dst)??? #遞歸的移動文件
示例:

shutil.move('/tmp/mysql','/tmp/mysql2') 在同一個目錄下,對于目錄就是改名,mysql2這個目標目錄不需要預先創建 shutil.move('/tmp/mysql2/123.txt','/tmp/mysql3/123.txt') 對于文件就是剪切

?




shutil模塊是高層次的文件接口,除了包含文件和目錄的操作函數以外,還包含了壓縮包的創建和解壓

shutil 支持的格式可以通過get_archive_formats 函數獲取。如下所示:
print shutil.get_archive_formats()
[('bztar', "bzip2'ed tar-file"),
('gztar', "gzip'ed tar-file"),
('tar', 'uncompressed tar file'),
('zip', 'ZIP file')]


創建壓縮包
shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)
base_name: 必須參數,壓縮打包后的文件名或者路徑名
format: 必須參數,,取值只能是get_archive_formats的輸出結果,壓縮或者打包格式 "zip", "tar", "bztar"or "gztar"
root_dir : 將哪個目錄或者文件打包(也就是源文件)
base_dir : 將哪個目錄或者文件打包(也就是源文件)
root_dir 和 base_dir 默認設置為當前目錄,root_dir 和 base_dir 一般可以認為是一樣的
https://docs.python.org/2.7/library/shutil.html?highlight=make_archive#shutil.make_archive

shutil.make_archive('tarball','gztar',root_dir='/tmp/mysql')


解壓壓縮包(python3才有)
shutil.unpack_archive(filename , extract_dir=None , format=None)
filename :壓縮包名稱
extract_dir :解壓以后保存的目錄
format :壓縮包的格式
注意:文件夾不存在會新建文件夾

shutil.unpack_archive('backup.tar.gz',extract_dir='/tmp/',format='gztar')

?



zipfile


zipfile模塊
ZipFile類
zipfile.ZipFile(zipfilename, 'a')
a:添加文件到壓縮包
r:讀取壓縮包內容
w:生成一個壓縮包

?

zipfile類常用方法

namelist : 返回zip 文件中包含的所有文件和文件夾的字符串列表;
extract : 從zip 文件中提取單個文件;
extractall :從zip 文件中提取所有文件。




ZipFile.write(filename, arcname, compress_type)
arcname:使用ZipFile.write增加文件時,會把文件本身的路徑也加進去,加上arcname就能根據自己的命名規則將文件加入zip包


ZipFile.extractall(path, members, pwd)
path:解壓到指定目錄
members:只解壓壓縮包里某個文件
pwd:指定壓縮包里的解壓密碼,zip可以加密壓縮


注意:python2.6不支持with xx as的寫法,不管是zipfile 還是 tarfile 模塊
z = zipfile.ZipFile('/tmp/aa.zip','w',zipfile.ZIP_DEFLATED)
z.write('/tmp/aa.py')
z.close()

python2.6不支持with xx as的寫法github地址:https://github.com/mgedmin/check-manifest/issues/22


?

示例
壓縮單個文件
如果要對文件進行壓縮,zlib模塊是必須的,如果zlib可以使用,你可以使用zipfile.ZIP_DEFLATED設置壓縮模式為單個文件或者歸檔一個整體。
默認的壓縮模式是zipfile.ZIP_STORED。

import zipfile import os with zipfile.ZipFile('/tmp/aa.zip','w',zipfile.ZIP_DEFLATED) as z:z.write('/tmp/aa.py')

z = zipfile.ZipFile('/tmp/aa.zip','w',zipfile.ZIP_DEFLATED) z.write('/tmp/aa.py') z.close()

?



?? ?
解壓文件

with zipfile.ZipFile('/tmp/123.zip', 'r') as z:z.extractall(path='/tmp/',pwd='123456') # 解壓全部,可設置解壓路徑,輸入解壓密碼

?



遞歸壓縮某個目錄下所有文件

def compress_file(zipfilename, dirname): # zipfilename是壓縮包名字,dirname是要打包的目錄if os.path.isfile(dirname):with zipfile.ZipFile(zipfilename, 'w') as z:z.write(dirname)else:with zipfile.ZipFile(zipfilename, 'w') as z:for root, dirs, files in os.walk(dirname):for single_file in files:if single_file != zipfilename:filepath = os.path.join(root, single_file)z.write(filepath)compress_file('a.zip', '.') # 執行函數

?





添加文件到已有的zip包中

def addfile(zipfilename, dirname):if os.path.isfile(dirname):with zipfile.ZipFile(zipfilename, 'a') as z:z.write(dirname)else:with zipfile.ZipFile(zipfilename, 'a') as z:for root, dirs, files in os.walk(dirname):for single_file in files:if single_file != zipfilename:filepath = os.path.join(root, single_file)z.write(filepath)addfile('a.zip', 'test.txt')

?





查看壓縮包中的文件

def viewfile(zipfilename):with zipfile.ZipFile(zipfilename, 'r') as z:print(z.namelist())print(z.namelist()) # 查看壓縮包中的文件列表print(z.read(z.namelist()[0])) # 讀出來壓縮包中的第一個文件的內容打印到屏幕,也可保存到文件中 viewfile('a.zip')

?



tarfile模塊

常用函數

getnames :獲取tar 包中的文件列表
extract :提取單個文件
extractall :提取所有文件

?

?


添加了arcname不會將文件所在目錄tmp添加到壓縮包里,解壓出來會把文件直接解壓到當前文件夾
不添加arcname則會將文件所在目錄tmp也添加到壓縮包里,解壓出來會把tmp解壓出來,所以文件放在tmp目錄下
建議是不添加arcname,這樣解壓出來就不會把所有文件解壓在當前目錄很混亂,mysql壓縮包也是這種做法
mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz



t = tarfile.open('/tmp/a.tgz', 'w:gz')
t.add('/tmp/aa.py',arcname='aa.py')
t.add('/tmp/22.txt',arcname='22.txt')
t.close()

tar -tf a.tgz
aa.py
22.txt


t = tarfile.open('/tmp/a.tgz', 'w:gz')
t.add('/tmp/aa.py')
t.add('/tmp/22.txt')
t.close()

tar -tf a.tgz
tmp/aa.py
tmp/22.txt


注意:python2.6不支持with xx as的寫法,不管是zipfile 還是 tarfile 模塊
t = tarfile.open('/tmp/a.tgz', 'w:gz')
t.add('/tmp/aa.py',arcname='aa.py')
t.add('/tmp/22.txt',arcname='22.txt')
t.close()

python2.6不支持with xx as的寫法github地址:https://github.com/mgedmin/check-manifest/issues/22


tarfile.open(name=None, mode=’r’, fileobj=None, bufsize=10240, **kwargs)
在打包的過程中可以設置壓縮規則,如想要以gz壓縮的格式打包
tar=tarfile.open('/path/to/your.tar.gz','w:gz')
其他格式如下表:
tarfile.open的mode有很多種:
mode action
'r' or 'r:*'?? ?Open for reading with transparent compression (recommended).
'r:'?? ?Open for reading exclusively without compression.
'r:gz'?? ?Open for reading with gzip compression.
'r:bz2'?? ?Open for reading with bzip2 compression.
'a' or 'a:'?? ?Open for appending with no compression. The file is created if it does not exist.
'w' or 'w:'?? ?Open for uncompressed writing.
'w:gz'?? ?Open for gzip compressed writing.
'w:bz2'?? ?Open for bzip2 compressed writing.


TarFile.add(name, arcname=None, recursive=True, exclude=None, filter=None)
name:可以是目錄,軟連接,文件
recursive:如果name是目錄則遞歸壓縮這個目錄,默認是true
arcname:使用tar.add()增加文件時,會把文件本身的路徑也加進去,加上arcname就能根據自己的命名規則將文件加入tar包
exclude:已經Deprecated
filter:不壓縮某些文件


TarFile.extractall(path='', members=None)
path:解壓的路徑
members:只解壓壓縮包里某個文件



示例
壓縮單個文件并打包

import tarfile import oswith tarfile.open('/tmp/a.tgz', 'w:gz') as tar:tar.add('/tmp/aa.py',arcname='aa.py')tar.add('/tmp/22.txt',arcname='22.txt')

t = tarfile.open('/tmp/a.tgz', 'w:gz') t.add('/tmp/aa.py',arcname='aa.py') t.add('/tmp/22.txt',arcname='22.txt') t.close()

?



?? ?
?? ?
解壓文件

with tarfile.open('a.tar', 'r') as tar:print(tar.getmembers()) # 查看壓縮包內文件成員tar.extractall(path='/tmp/') # 解壓全部???

t = tarfile.open('/data/test/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz', 'r:gz') print(t.getmembers()) # 查看壓縮包內文件成員 t.extractall(path='/data/test/mysql') # 解壓全部 t.close()

?




?? ?
壓縮某個目錄下所有文件

def compress_file(tarfilename, dirname): # tarfilename是壓縮包名字,dirname是要打包的目錄if os.path.isfile(dirname):with tarfile.open(tarfilename, 'w') as tar:tar.add(dirname)else:with tarfile.open(tarfilename, 'w') as tar:for root, dirs, files in os.walk(dirname):for single_file in files:# if single_file != tarfilename:filepath = os.path.join(root, single_file)tar.add(filepath)compress_file('test.tar', 'test.txt') compress_file('t.tar', '.')

?






添加文件到已有的tar包中

def addfile(tarfilename, dirname): # tarfilename是壓縮包名字,dirname是要打包的目錄if os.path.isfile(dirname):with tarfile.open(tarfilename, 'a') as tar:tar.add(dirname)else:with tarfile.open(tarfilename, 'a') as tar:for root, dirs, files in os.walk(dirname):for single_file in files:# if single_file != tarfilename:filepath = os.path.join(root, single_file)tar.add(filepath)addfile('t.tar', 'ttt.txt') addfile('t.tar', 'ttt')

?








如果語法正確,pycharm可以彈出語法提示

因為用的舊的語法,所以可以出來提示

python2.6不能用with xx as語法,所以tar. 不能出來提示

總結

以上是生活随笔為你收集整理的Python第二十天 shutil 模块 zipfile tarfile 模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91精产国品一二三区在线观看 | 日本人妻不卡一区二区三区中文字幕 | 91免费观看入口 | 日本作爱视频 | 中文字幕一区二区在线播放 | 99这里只有 | 久久资源在线 | 日本视频h| 亚洲香蕉| 国产美女主播 | 中文字幕精品久久 | 日韩avxxx| 日韩专区第一页 | 国产www免费观看 | 中文字字幕一区二区三区四区五区 | 在线免费观看成年人视频 | 超级黄色录像 | av新天堂 | 午夜男人影院 | 欧美一区二区日韩一区二区 | 国产91免费在线观看 | 国产在线精 | 三级在线视频 | 日韩午夜在线播放 | 久久一卡二卡 | 免费国产91 | 秋霞黄色网 | 老司机午夜福利视频 | 国产999在线观看 | 日韩精品乱码久久久久久 | www.欧美.com| 国产69精品一区二区 | 人操人操 | 岛国av免费观看 | 伊人网视频在线观看 | 亚洲天堂成人av | 日韩v片 | 日韩三级在线免费观看 | 五月婷婷七月丁香 | 青青视频网| 中文字幕久久久久 | 国产大片中文字幕在线观看 | 欧美xxxx83d | 国产色无码精品视频国产 | 一女被多男玩喷潮视频 | 亚洲播放器 | 中文亚洲av片在线观看 | 美女毛片网站 | 午夜剧场成人 | 成人av免费在线 | 中文字幕亚洲乱码熟女一区二区 | 美女扒开粉嫩的尿囗给男生桶 | 亚洲成人日韩在线 | 强行挺进白丝老师里呻吟 | 特级西西444www大精品视频免费看 | 中文人妻熟女乱又乱精品 | 奇米成人网 | 久精品在线观看 | 欧美在线视频精品 | 午夜免费视频观看 | 精品韩国一区二区三区 | 射进来av影视网 | 逼特逼在线视频 | 少妇婷婷 | 欧美精品做受xxx性少妇 | 国产区在线观看视频 | 男人天堂五月天 | 国产精品入口66mio男同 | 国产人成精品 | 中文日韩欧美 | 亚洲一区二区三区人妻 | 国产一级理论 | 婷婷伊人 | 一级黄色片在线观看 | 欧美专区在线视频 | 国产精品久久久久久久久久久不卡 | 日本黄区免费视频观看 | 人人操在线播放 | 亚洲国产精品久久久久婷婷老年 | 成年人黄色片网站 | 一区二区三区四区视频 | 成人午夜视频在线免费观看 | 喷水了…太爽了高h | 在线观看亚洲欧美 | 天天摸天天做 | 亚洲成人生活片 | 午夜网站视频 | 久久久久黄 | 99热这里只有精品9 日韩综合在线 | 欧洲一区二区三区 | 国产又粗又猛视频免费 | 国产人妻人伦精品1国产盗摄 | 美女诱惑一区二区 | 欧美亚洲天堂 | 巨乳中文字幕 | 熟女视频一区二区三区 | 免费在线不卡av | 亚洲国产日韩一区 | 精品人伦一区二区三区蜜桃免费 |