shutil.copyfileobj(fsrc, fdst,[ length]) 拷貝文件句柄,將類文件對象fsrc的內容複製到類文件對象fdst。如果給定整數長度,則為緩衝區大小。如果長度是負值意味著複製數據時不需要以塊的形式對源數據進行迴圈,預設情況下,數據是塊讀取的,以避免不受控制的記憶體消耗。 ...
shutil.copyfileobj(fsrc, fdst,[ length])
拷貝文件句柄,將類文件對象fsrc的內容複製到類文件對象fdst。如果給定整數長度,則為緩衝區大小。如果長度是負值意味著複製數據時不需要以塊的形式對源數據進行迴圈,預設情況下,數據是塊讀取的,以避免不受控制的記憶體消耗。註意,如果fsrc對象的當前文件位置不是0,那麼只複製從當前文件位置到文件末尾的內容。
如下,拷貝文件操作:
import shutil with open("test.txt",mode="r",encoding="utf-8") as f1, \ open("abc",mode="a",encoding="utf-8") as f2: shutil.copyfileobj(f1,f2) # 拷貝文件句柄
拷貝後的數據如下圖所示:
shutil.copyfile(src, dst, *, follow_symlinks=True)
src:源文件。
dst:目標文件
*:模式不用管編碼方式預設是utf-8
僅拷貝狀態的信息,包括:mode bits, atime, mtime, flags
如果follow_symlinks為false, src是一個符號鏈接(快捷方式),那麼將創建一個新的符號鏈接(快捷方式),而不是複製src指向的文件。
文件拷貝,操作如下:
import shutil shutil.copyfile("test.txt","abc")
拷貝後如下圖所示:
shutil.copymode(src, dst, *, follow_symlinks=True)
將src許可權複製到dst。文件內容、所有者和組不受影響。如果follow_symlinks為假,並且src和dst都是符號鏈接,copymode()將嘗試修改dst本身的模式(而不是它指向的文件)。此功能並非在每個平臺上都可用;有關更多信息,請參見copystat()。如果copymode()不能修改本地平臺上的符號鏈接,並且被要求這樣做,那麼它將什麼也不做並返回。
shutil.copystat(src, dst, *, follow_symlinks=True)
將src文件狀態拷貝到dst,dst文件必須存在。如上次訪問時間、上次修改時間和標誌從src複製到dst。在Linux上,copystat()也儘可能地複製“擴展屬性”。文件內容、所有者和組不受影響。
如果follow_symlinks為假,並且src和dst都引用符號鏈接,copystat()將對符號鏈接本身進行操作,而不是對符號鏈接引用的文件進行操作,從src符號鏈接讀取信息,並將信息寫入dst符號鏈接。
shutil.copy(src, dst, *, follow_symlinks=True)
將文件src複製到文件或目錄dst。如果dst指定一個目錄,該文件將使用來自src的文件名複製到dst文件夾中,如果dst是文件名將src文件內容複製一份到dst文件中。
拷貝文件test.txt內容到abc中,拷貝test.txt到一個目錄下。
import shutil shutil.copy("test.txt","abc") shutil.copy("test.txt",r"I:\python_work\test")
拷貝後的內容如下:
shutil.copy2(src, dst, *, follow_symlinks=True)
功能與copy相同,但可以試圖保存目標文件的原數據,(實驗沒成功,拷貝後會覆蓋原有數據)。
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
遞歸複製位於src的整個目錄樹,返回目標目錄。由dst命名的目標目錄必須不存在,它將被當做父目錄。
import shutil shutil.copytree("a","z")
如下圖示拷貝後的數據:
shutil.rmtree(path, ignore_errors=False, onerror=None)
遞歸的刪除目錄,一定要註意在刪除時,無論目錄是空目錄還是有文件的目錄,都會不提示的刪除,而且刪除的數據不經過回收站,無法恢復,所以慎用。
import shutil shutil.rmtree("z")
shutil.move(src, dst, copy_function=copy2)
相當於剪切,如果在同目錄下就相當於重命名的操作。
如下麵相當於重命名操作,剪切也類似就不演示了。
import shutil shutil.move("abc","abc.txt")
shutil.disk_usage(path)
以命名元組的形式返回給定路徑的磁碟使用情況統計信息,屬性為total、used和free,即總空間、已用空間和可用空間量(以位元組為單位)。在Windows上,路徑必須是目錄;在UNIX上,路徑可以是文件或目錄。
import shutil ret = shutil.disk_usage(r"I:\python_work") print(ret) # 列印位元組形式 # 列印GB形式的 print("total:",int(ret[0] / (1024 ** 3)),"GB") print("used:",int(ret[1] / (1024 ** 3)),"GB") print("free",int(ret[2] / (1024 ** 3)),"GB")
內容如下:
shutil.chown(path, user=None, group=None)
更改文件用戶的所有者和用戶組
shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
返回可以行文件的路徑,如下所示:
import shutil print(shutil.which("cmd")) # 列印內容如下 C:\Windows\system32\cmd.EXE
shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)
shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)
創建壓縮包並返迴文件路徑,例如:zip、tar
base_name: 要創建的文件名,如果有路徑則將文件保存到路徑下,如果沒有路徑則保存到當前目錄下,件名是沒有擴展名的。
format:壓縮包種類,“zip”, “tar”, “bztar”,“gztar”
root_dir:要被打包的文件路徑
base_dir:被打包文件的路徑,優先順序高於root_dir
owner:用戶,預設當前用戶
group:組,預設當前組
logger:用於記錄日誌,通常是logging.Logger對象
如下:
import shutil shutil.make_archive(base_name=r"I:\test\python_work_zip", format="zip", root_dir=r"I:\test")
打包後的內容如下:
shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的
zipfile模塊
壓縮文件:
import zipfile z = zipfile.ZipFile('test.zip', 'w') # 壓縮後的文件名 z.write('test') # 要被壓縮的文件 z.close() # 關閉zip對象
壓縮後的內容如下:
解壓文件:
import zipfile z = zipfile.ZipFile('test_1.zip', 'r') # 要被解壓的文件 z.extractall(path=r'I:\test') # 將提取後的文件保存到路徑中 z.close()
解壓後的文件如下:
tarfile壓縮:
import tarfile t=tarfile.open('test.tar','w') # 壓縮後的名字 t.add('test',arcname='a.bak') # 要壓縮的文件和壓縮後將被壓縮文件改名為a.bak t.close()
壓縮後的文件內容如下:
解壓:
import tarfile t=tarfile.open('test.tar','r') # 要被解壓的包 t.extractall(path=r"I:\test") # 解壓後保存的路徑 t.close()
解壓後內容如下: