shutil 可以看作 sh + util,即 shell 工具之意,該模塊提供了一些針對(duì)文件和文件夾的高級(jí)操作,如:拷貝、刪除、移動(dòng)等,shutil 模塊是對(duì) os 模塊的補(bǔ)充。
文件和文件夾操作
copyfileobj(fsrc, fdst, length=16*1024)
復(fù)制對(duì)象 fsrc 的內(nèi)容到 fdst,如果 fdst 不存在則自動(dòng)創(chuàng)建,length 表示緩沖大小,如果是負(fù)數(shù)表示直接復(fù)制,默認(rèn)為值為 16*1024。示例如下:
s = open(‘folder1/fsrc.txt’,’r’)d = open(‘folder1/fdst.txt’,’w’)shutil.copyfileobj(s,d,16*1024)
shutil.copyfile(src, dst, *, follow_symlinks=True)
復(fù)制文件 src 的內(nèi)容到 dst 并返回 dst,如果 dst 不存在則自動(dòng)創(chuàng)建,src 和 dst 是字符串類型的路徑名,如果 src 和 dst 指向同一個(gè)文件,拋出 SameFileError。示例如下:
shutil.copyfile(‘folder1/fsrc.txt’,’folder1/fdst.txt’)
copymode(src, dst, *, follow_symlinks=True)
復(fù)制文件 src 的權(quán)限到 dst,src 和 dst 是字符串類型的路徑名,如果 follow_symlinks 為 False 且 src 和 dst 都是符號(hào)鏈接,將修改 dst 符號(hào)鏈接文件而非源文件的權(quán)限。示例如下:
shutil.copymode(‘folder1/fsrc.txt’,’folder1/fdst.txt’)
注:符號(hào)鏈接(軟鏈接)是一類特殊的文件, 其包含有一條以絕對(duì)路徑或者相對(duì)路徑的形式指向其它文件或者目錄的引用。
copystat(src, dst, *, follow_symlinks=True)
復(fù)制 src 的權(quán)限、最后訪問(wèn)時(shí)間、最后修改時(shí)間以及標(biāo)志到 dst,src 和 dst 是字符串類型的路徑名,可以是文件或目錄,在Linux平臺(tái)上還會(huì)復(fù)制擴(kuò)展屬性。示例如下:
shutil.copystat(‘folder1/fsrc.txt’,’folder1/fdst.txt’)
擴(kuò)展文件屬性是文件系統(tǒng)的一個(gè)功能,它允許用戶將計(jì)算機(jī)文件與未被文件系統(tǒng)所解釋的元數(shù)據(jù)關(guān)聯(lián)起來(lái)。
copy(src, dst, *, follow_symlinks=True)
復(fù)制文件 src 的內(nèi)容和權(quán)限到 dst,dst 可以是文件或文件夾,如果是文件,函數(shù)的返回值就是 dst,如果是文件夾,函數(shù)的返回值就是 src 的文件名與 dst 的路徑拼接,src 和 dst 都是字符串類型,如果 dst 指向一個(gè)文件夾,則創(chuàng)建與 src 同名的新文件。示例如下:
# dst 為文件shutil.copy(‘folder1/fsrc.txt’,’folder1/fdst.txt’)# dst 為文件夾shutil.copy(‘folder1/fsrc.txt’, ‘tmp/’)
copy2(src, dst, *, follow_symlinks=True)
該方法會(huì)保留 src 的所有元數(shù)據(jù)(如創(chuàng)建時(shí)間、修改時(shí)間等),其他與 copy() 相同,當(dāng) follow_symlinks 為 False 且 src 為軟鏈接時(shí),dst 將作為軟鏈接被創(chuàng)建并拷貝 src 的所有元數(shù)據(jù)到 dst。示例如下:
shutil.copy2(‘folder1/fsrc.txt’,’folder1/fdst.txt’)
ignore_patterns(*patterns)
創(chuàng)建并返回一個(gè)函數(shù),可傳遞到 copytree() 中作為 ignore 參數(shù)的值,忽略滿足匹配模式的文件和目錄。示例如下:
shutil.ignore_patterns(‘tmp*’)
copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
遞歸復(fù)制以 src 為根目錄的整個(gè)目錄樹(shù),返回目標(biāo)目錄 dst,dst 必須是不存在的目錄,它和它不存在的父目錄都將被創(chuàng)建,使用 copystat() 復(fù)制目錄元數(shù)據(jù),使用 copy2() 復(fù)制文件內(nèi)容和元數(shù)據(jù)。
- symlinks:是否復(fù)制軟鏈接;
- ignore:指定不參與復(fù)制的文件,其值應(yīng)該是一個(gè) ignore_patterns() 方法;
- copy_function:指定復(fù)制的模式。
示例如下:
shutil.copytree(‘folder1’, ‘folder2’, ignore=shutil.ignore_patterns( ‘tmp*’))
rmtree(path, ignore_errors=False, onerror=None)
刪除目錄,path 必須指定一個(gè)目錄。示例如下:
shutil.rmtree(‘rm’)
move(src, dst, copy_function=copy2)
移動(dòng)文件或目錄到目標(biāo)位置,如果目標(biāo)位置 dst 是一個(gè)存在的目錄,將 src 移動(dòng)到 dst 路徑下。示例如下:
shutil.move(‘folder1/’, ‘folder2/’)
disk_usage(path)
檢測(cè)磁盤使用信息,返回值為元組。示例如下:
print(shutil.disk_usage(‘folder1/’))# 輸出結(jié)果# usage(total=107375226880, used=69274427392, free=38100799488)
which(cmd, mode=os.F_OK | os.X_OK, path=None)
返回 cmd 調(diào)用的可執(zhí)行文件路徑,沒(méi)有返回 None。mode:用于判斷文件是否存在或可執(zhí)行,path:cmd 的查找路徑。示例如下:
print(shutil.which(‘python’))# 輸出結(jié)果# E:Python3python.EXE
chown(path, user=None, group=None)
改變指定 path 的所有者和所屬組,user 和 group 參數(shù),可以是系統(tǒng)上的用戶名、組名或 uid/gid,至少需要傳遞其中一個(gè)參數(shù)。
歸檔操作
make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None)
創(chuàng)建歸檔文件,并返回歸檔文件的名稱。
- base_name:要?jiǎng)?chuàng)建的歸檔文件的名稱,可以包含路徑表示歸檔文件的目標(biāo)位置;
- format:歸檔文件的格式(zip、tar、 gztar、bztar、xztar);
- root_dir:歸檔文件的根目錄(默認(rèn)當(dāng)前目錄);
- base_dir:歸檔文件中所有文件和目錄的前綴路徑(默認(rèn)當(dāng)前目錄);
- dry_run:如果為 True,不創(chuàng)建歸檔文件。
- owner/group:歸檔文件中所有文件和目錄的所屬用戶和組,如果 format 為 zip,owner 和 group 的配置不生效;
- logger:通常使用 logging.Logger 對(duì)象;
- verbose:已棄用。
看下示例:
# zipfile:生成文件名;歸檔 tmp 目錄下文件和文件夾shutil.make_archive(‘zipfile’, ‘zip’, ‘tmp’)
get_archive_formats()
返回支持的歸檔格式列表,列表中的每個(gè)元素是 (name, description) 形式的元組。示例如下:
print(shutil.get_archive_formats())# 輸出結(jié)果# [(‘bztar’, “bzip2’ed tar-file”), (‘gztar’, “gzip’ed tar-file”), (‘tar’, ‘uncompressed tar file’), (‘xztar’, “xz’ed tar-file”), (‘zip’, ‘ZIP file’)]
register_archive_format(name, function, extra_args=None, description=’’)
注冊(cè)一個(gè)格式名并綁定到一個(gè)壓縮時(shí)使用的程序,function 是用于解包存檔文件的可調(diào)用函數(shù)。
unregister_archive_format(name)
從支持的歸檔格式中移除 name。
unpack_archive(filename, extract_dir=None, format=None)
解壓歸檔文件。filename:歸檔文件名稱;extract_dir:歸檔文件解壓的目標(biāo)位置;format:使用指定格式的解壓器解壓歸檔文件。
register_unpack_format(name, extensions, function, extra_args=None, description=’’)
注冊(cè)格式為 name 的解壓器。
unregister_unpack_format(name)
從支持的解壓格式中移除 name。
get_unpack_formats()
返回支持的解壓格式列表,列表中的每個(gè)元素是 (name, extensions, description) 形式的元組。
查詢終端大小
get_terminal_size()
查詢終端大小。示例如下:
print(shutil.get_terminal_size())# 輸出結(jié)果# os.terminal_size(columns=80, lines=24)