最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的shutil模塊詳析

 更新時(shí)間:2023年09月18日 11:06:26   作者:斬心之鬼  
這篇文章主要介紹了Python中的shutil模塊詳析,Python的Shutil模塊可以看做是OS模塊的補(bǔ)充,它提供了對文件(夾)復(fù)制,移動(dòng),刪除,壓縮和解壓縮的方法,下面本文會(huì)對shutil模塊的常用方法進(jìn)行分類介紹,需要的朋友可以參考下

前言

Python的Shutil模塊可以看做是OS模塊的補(bǔ)充,它提供了對文件(夾)復(fù)制,移動(dòng),刪除,壓縮和解壓縮的方法。

下面本文會(huì)對shutil模塊的常用方法進(jìn)行分類介紹。

一、文件復(fù)制

shutil模塊提供了多種文件復(fù)制方法,主要方法如下表:

1. shutil.copy(src, dst)

src為源文件路徑(必須是文件),dst為目標(biāo)文件路徑(文件名可加可不加)

目標(biāo)文件如存在會(huì)覆蓋掉,不存在會(huì)創(chuàng)建新文件,包括路徑

只copy內(nèi)容和權(quán)限,其他文件屬性如時(shí)間沒有copy,注意權(quán)限是copy了

返回值為目標(biāo)文件路徑

代碼示例如下:

 shutil.copy('../class.py','./') #復(fù)制文件到當(dāng)前目錄,注意dst為目標(biāo)路徑
'./class.py'
 os.listdir('./') #列出當(dāng)前目錄的文件名信息,class.py已創(chuàng)建
['test3', 'class.py', 'test2', 'function.py', 'function1.py', 'test1']
 shutil.copy('../class.py','./class2.py') #復(fù)制文件并重命名,注意dst為文件名
'./class2.py'
 os.listdir('./') #列出當(dāng)前目錄的文件名信息,class2.py已創(chuàng)建
['test3', 'class.py', 'test2', 'function.py', 'class2.py', 'function1.py', 'test1']
 

2. shutil.copyfile(src, dst)

src為源文件路徑(必須是文件),dst為目標(biāo)文件路徑,且必須包含文件名

目標(biāo)路徑不存在會(huì)報(bào)錯(cuò)

返回值為目標(biāo)文件路徑

代碼示例如下:

 shutil.copyfile('../class.py','./class2.py') #用copyfile復(fù)制文件
'./class2.py'
 shutil.copyfile('../class.py','./os/class2.py') #目標(biāo)文件的目錄不存在會(huì)報(bào)錯(cuò)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.6/shutil.py", line 121, in copyfile
    with open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: './os/class2.py'
 shutil.copyfile('../class.py','./') #dst不是文件而是目錄會(huì)報(bào)錯(cuò)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.6/shutil.py", line 121, in copyfile
    with open(dst, 'wb') as fdst:
IsADirectoryError: [Errno 21] Is a directory: './'

3. shutil.copy2(src, dst)

  • src為源文件路徑,dst為目標(biāo)文件路徑
  • 同時(shí)復(fù)制源文件的內(nèi)容和stat信息(包含用戶,組,權(quán)限,時(shí)間信息等)
  • 返回值為目標(biāo)文件路徑

shutil.copy2()和shutil.copy()的用法很類似,不同點(diǎn)是shutil.copy2()不僅copy了源文件內(nèi)容,同時(shí)copy了源文件的文件屬性,包括修改/訪問時(shí)間(創(chuàng)建時(shí)間貌似無法復(fù)制),權(quán)限等信息。shutil.copy2()相同于同時(shí)做了shutil.copy()和shutil.copystat(),因此該方法名字這里的copy2可以簡單記憶成2次copy。

下面是代碼舉例:

 shutil.copy('../class.py','./class2.py') #用copy來復(fù)制文件
'./class2.py'
 time.ctime(os.stat('../class.py').st_mtime) #返回源文件修改時(shí)間
'Sat Jun  8 17:30:32 2019'
 time.ctime(os.stat('./class2.py').st_mtime) #返回目標(biāo)文件修改時(shí)間,和源文件不一樣
'Sun Sep 18 10:20:36 2022'
 shutil.copy2('../class.py','./class3.py') #用copy2來復(fù)制文件
'./class3.py'
 time.ctime(os.stat('./class3.py').st_mtime) #返回目標(biāo)文件修改時(shí)間,和源文件一樣
'Sat Jun  8 17:30:32 2019'

4. shutil.copyfileobj(fsrc, fdst,[length=*])

  • fsrc為源文件句柄,fdst為目標(biāo)文件句柄,length為copy內(nèi)容大小
  • 源文件和目標(biāo)文件必須是已經(jīng)打開的文件句柄
  • 沒有返回值

shutil.copyfileobj()方法可以copy一個(gè)打開的文件到另一個(gè)打開的文件,注意源文件和目標(biāo)文件參數(shù)均是文件句柄對象。

代碼示例如下:

 file1=open('hr.py','r') #打開源文件
 file2=open('hr1.py','w') #打開目標(biāo)文件
 shutil.copyfileobj(file1,file2) #文件復(fù)制,注意沒有返回值

5. shutil.copymode(src, dst)

  • src為源文件路徑,dst為目標(biāo)文件路徑,可以是文件或者目錄
  • 目標(biāo)文件必須已經(jīng)存在,只復(fù)制權(quán)限信息,不復(fù)制內(nèi)容,時(shí)間,用戶和組等信息
  • 返回值為目標(biāo)文件路徑

shutil.copymode()只會(huì)復(fù)制文件權(quán)限(st_mode信息),不會(huì)復(fù)制內(nèi)容和其他屬性。

代碼示例如下:

 os.system('chmod 777  ../class.py') #用shell指令將源文件的讀寫屬性改變
0
 os.system('ls -l ../class.py') #打印源文件的屬性為-rwxrwxrwx
-rwxrwxrwx 1 user user 527 6月   8  2019 ../class.py
0
 shutil.copyfile('../class.py','./class4.py') #用copyfile來復(fù)制文件
'./class4.py'
 os.system('ls -l ./class4.py') #打印目標(biāo)文件屬性為-rw-r--r--,和源文件不一樣
-rw-r--r-- 1 user user 527 9月  18 10:40 ./class4.py
0
 shutil.copymode('../class.py','./class4.py')#用copymode來復(fù)制文件權(quán)限
 os.system('ls -l ./class4.py') #打印目標(biāo)文件屬性為-rwxrwxrwx,和源文件一樣
-rwxrwxrwx 1 user user 527 9月  18 10:40 ./class4.py
0

6. shutil.copystat(src, dst)

  • src為源文件路徑,dst為目標(biāo)文件路徑,可以是文件或者目錄
  • 目標(biāo)文件必須已經(jīng)存在,只復(fù)制stat信息,包含權(quán)限,時(shí)間,組,用戶等,不復(fù)制內(nèi)容
  • 返回值為目標(biāo)文件路徑

shutil.copystat()相比shutil.mode(),同樣也不復(fù)制內(nèi)容,不同的是它除了復(fù)制權(quán)限信息,其他stat信息包括修改時(shí)間等也按同樣復(fù)制。

代碼示例如下:

 shutil.copyfile('../class.py','./class5.py') #復(fù)制文件
'./class5.py'
 os.system('ls -l ../class.py') #打印源文件信息
-rwxrwxrwx 1 user user 527 6月   8  2019 ../class.py
0
 os.system('ls -l ./class5.py') #打印目標(biāo)文件信息,權(quán)限和時(shí)間和源文件不一樣
-rw-r--r-- 1 user user 527 9月  18 10:48 ./class5.py
0
 shutil.copystat('../class.py','./class5.py') #復(fù)制文件stat到目標(biāo)文件
 os.system('ls -l ./class5.py') #打印目標(biāo)文件信息,權(quán)限和時(shí)間和源文件一樣
-rwxrwxrwx 1 user user 527 6月   8  2019 ./class5.py
0

7. shutil.copytree(src, dst,ignore=none,copy_function=shutil.copy2)

  • src為源路徑,dst為目標(biāo)路徑,目標(biāo)路徑必須不存在
  • ignore必須是一個(gè)可調(diào)用對象,shutil.copytree()每次遞歸訪問文件夾時(shí),會(huì)將當(dāng)前目錄和目錄的os.listdir()作為參數(shù)調(diào)用一次ignore,該可調(diào)用對象必須返回一個(gè)相對于當(dāng)前目錄的目錄和文件 名序列(即其第二個(gè)參數(shù)的子集);隨后這些名稱將在拷貝進(jìn)程中被忽略。如ignore=shutil.ignore_patterns('*.py'),代表以.py結(jié)尾的文件或者文件夾都不會(huì)復(fù)制。
  • copy_function可以選擇shutil.copy2或者shutil.copy模式進(jìn)行copy,默認(rèn)是shutil.copy2
  • 返回值為目標(biāo)文件路徑

shutil.copytree()會(huì)遞歸復(fù)制以src為根起點(diǎn)的整個(gè)目錄樹到名為dst的目錄并返回目標(biāo)目錄,注意src必須是目錄,dst必須不能已存在。如果復(fù)制過程中需要忽略某些文件可以使用ignore參數(shù),注意ignore后面需要接可調(diào)用對象,該對象可以是一個(gè)自定義的函數(shù),函數(shù)的參數(shù)有2個(gè),當(dāng)前目錄,和當(dāng)前目錄的os.listdir(),函數(shù)返回的是需要ignore的文件名。該函數(shù)也可以用shutil自帶的shutil.ignore_patterns('*patterns')。

代碼示例如下:

 shutil.copytree('/home/user/Python','/home/user/Python1',ignore=None,copy_function=shutil.copy)
'/home/user/Python1'
 os.listdir('/home/cfzhu/Python1') #列出copy后的文件夾中的文件
['dictionary.py', 'abnormal.py', 'aa.json', '.file.py.swp', '.print.py.swp', 'hello.py', 'class.py', 'input.py', 'function.py', 'shutil', '.abnormal.py.swo', 'os', 'file.py', 'file2', 'print.py', 'file1', '__pycache__', 'import.py', '.abnormal.py.swp', 'file3', 'hr.py', 'tk.py', 'aa1.json']
 shutil.copytree('/home/user/Python','/home/user/Python2',ignore=shutil.ignore_patterns('*.py'),copy_function=shutil.copy2)
'/home/user/Python2'
 os.listdir('/home/user/Python2') #copy后的文件名沒有"*py"結(jié)尾的文件
['aa.json', '.file.py.swp', '.print.py.swp', 'shutil', '.abnormal.py.swo', 'os', 'file2', 'file1', '__pycache__', '.abnormal.py.swp', 'file3', 'aa1.json']
 

二、文件移動(dòng)和刪除

1. shutil.move(src,dst)

  • src為源文件路徑,dst為目標(biāo)文件路徑,兩者都可以是文件或者目錄
  • 返回值為目標(biāo)文件路徑

代碼如下(示例):

 shutil.move('hr.py','hr1.py') #移動(dòng)文件
'hr1.py'
 shutil.move('./shutil','./shutil1') #移動(dòng)文件夾
'./shutil1'

2. shutil.rmtree(src)

  • src為源文件路徑
  • 沒有返回值

shutil模塊中的rmtree()可以遞歸徹底刪除非空文件夾,需要慎重使用

代碼如下:

 os.listdir()
['.bashrc', 'Python2', '.cache', 'Python1', 'hr_py']
 shutil.rmtree('./Python2/') #遞歸刪除文件夾的所有內(nèi)容
 os.listdir() #文件夾已刪除
[.bashrc', '.cache', 'Python1', 'hr_py']

三、文件壓縮和解壓縮

 1. shutil.make_archive(base_name,format,dir)

  • base_name為源文件路徑
  • format為壓縮格式,可以是"zip", "tar", "gztar","bztar", or "xztar"
  • dir為壓縮后的文件路徑
  • 返回壓縮后文件路徑

shutil.make_archive()可以將文件或者文件夾進(jìn)行壓縮,壓縮格式可選,注意壓縮源文件并不會(huì)刪除源文件。

代碼如下(示例):

 os.listdir()
['shutil1', 'hr2.py', 'function.py']
 shutil.make_archive('./shutil1','zip','./') #壓縮文件為zip格式
'/home/cfzhu/Python/shutil1.zip'

2. shutil.unpack_archive(filename,extract_dir=None, format=None)

  • filename為源文件路徑
  • extract_dir為提取后的路徑,默認(rèn)當(dāng)前路徑
  • format為壓縮格式,可以是"zip", "tar", "gztar","bztar", or "xztar",不指定默認(rèn)為根據(jù)源文件后綴
  • 返回壓縮后文件路徑

shutil.unpack_archive()可以將壓縮文件解壓縮。

代碼如下(示例):

 shutil.unpack_archive('./shutil1.zip','./shutil2') #解壓縮
 os.listdir()
['shutil1', 'dictionary.py', 'shutil2', 'abnormal.py', 'aa.json', '.file.py.swp', '.print.py.swp', 'shutil1.zip', ]

總結(jié)

以上就是shutil的常見方法的介紹,包含了文件復(fù)制,文件移動(dòng)和刪除以及文件壓縮和解壓縮三大部分。

文中每個(gè)方法都提供了實(shí)例演示,希望能對大家有所幫助。

到此這篇關(guān)于Python中的shutil模塊詳析的文章就介紹到這了,更多相關(guān)Python的shutil模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python與xml數(shù)據(jù)的交互詳解

    python與xml數(shù)據(jù)的交互詳解

    這篇文章主要介紹了python與xml數(shù)據(jù)的交互詳解,文章圍繞主題站卡詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • 基于PyQt5制作Excel數(shù)據(jù)分組匯總器

    基于PyQt5制作Excel數(shù)據(jù)分組匯總器

    這篇文章主要介紹了基于PyQt5制作的一個(gè)小工具:Excel數(shù)據(jù)分組匯總器。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起試一試
    2022-01-01
  • Python中schedule擴(kuò)展的具體使用

    Python中schedule擴(kuò)展的具體使用

    Python的schedule模塊是一個(gè)輕量級的Python庫,用于在指定時(shí)間執(zhí)行某些操作,本文就來介紹一下Python中schedule擴(kuò)展的具體使用,感興趣的可以了解一下
    2024-12-12
  • Python語言的12個(gè)基礎(chǔ)知識(shí)點(diǎn)小結(jié)

    Python語言的12個(gè)基礎(chǔ)知識(shí)點(diǎn)小結(jié)

    這篇文章主要介紹了Python語言的12個(gè)基礎(chǔ)知識(shí)點(diǎn)小結(jié),包含正則表達(dá)式替換、遍歷目錄方法、列表按列排序、去重、字典排序等,需要的朋友可以參考下
    2014-07-07
  • 查看Python安裝路徑幾種方法小結(jié)

    查看Python安裝路徑幾種方法小結(jié)

    這篇文章主要介紹了查看Python安裝路徑幾種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python編輯器Pycharm安裝配置超詳細(xì)教程

    Python編輯器Pycharm安裝配置超詳細(xì)教程

    PyCharm是一款功能強(qiáng)大的Python編輯器,具有跨平臺(tái)性,下面這篇文章主要給大家介紹了關(guān)于Python編輯器Pycharm安裝配置的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Pytorch在dataloader類中設(shè)置shuffle的隨機(jī)數(shù)種子方式

    Pytorch在dataloader類中設(shè)置shuffle的隨機(jī)數(shù)種子方式

    今天小編就為大家分享一篇Pytorch在dataloader類中設(shè)置shuffle的隨機(jī)數(shù)種子方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 基于Python編寫文件拆分工具(兼容Excel&csv)

    基于Python編寫文件拆分工具(兼容Excel&csv)

    在日常數(shù)據(jù)處理工作中,我們經(jīng)常遇到需要將大型CSV或Excel文件按照某些條件進(jìn)行拆分的需求,下面我們就來看看如何使用Python和Tkinter開發(fā)一個(gè)功能強(qiáng)大,界面友好的文件拆分工具吧
    2025-10-10
  • python實(shí)現(xiàn)人民幣大寫轉(zhuǎn)換

    python實(shí)現(xiàn)人民幣大寫轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)人民幣大寫轉(zhuǎn)換的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 如何使Python中的print()語句運(yùn)行結(jié)果不換行

    如何使Python中的print()語句運(yùn)行結(jié)果不換行

    這篇文章主要介紹了如何使Python中的print()顯示當(dāng)前語句后不換行,print() 是一個(gè)常用函數(shù),但是每次,print()語句顯示后都會(huì)換行,本問我們就來節(jié)日如何使print()顯示當(dāng)前語句后不換行,需要的朋友可以參考一下
    2022-03-03

最新評論

仙桃市| 雷波县| 满洲里市| 琼中| 芷江| 民权县| 广州市| 博罗县| 卢湾区| 张掖市| 宜川县| 长阳| 沭阳县| 呼图壁县| 沙坪坝区| 五寨县| 南充市| 大名县| 苏尼特右旗| 沙坪坝区| 花莲市| 芜湖市| 沈阳市| 南投市| 淳化县| 怀化市| 临潭县| 东乡族自治县| 麻城市| 泸定县| 舟山市| 乾安县| 买车| 永兴县| 郎溪县| 仪征市| 南木林县| 沿河| 东方市| 尼木县| 德兴市|