網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言:
?Python中有多個(gè)內(nèi)置模塊來操作文件與目錄(os、os.path、shutil、pathlib等等)。
os.path
os.path模塊主要用于獲取文件的屬性,包含以下幾種常用方法:
路徑操作:
print(os.path.splitext('.info')) # ('.info', '') print(os.path.splitext('test.txt')) # ('test', '.txt') print(os.path.splitext(r'c:\tmp\test.txt')) # ('c:\\tmp\\test', '.txt')
屬性操作:
方法 | 說明 |
---|---|
getatime(path) | 返回最近訪問時(shí)間(浮點(diǎn)型秒數(shù)) |
getmtime(path) | 返回最近文件修改時(shí)間 |
getctime(path) | 返回文件創(chuàng)建時(shí)間 |
getsize(path) | 返回文件大小,如果文件不存在就返回錯(cuò)誤 |
文件類型判斷:
方法 | 說明 |
---|---|
isfile(path) | 判斷路徑是否為文件 |
isdir(path) | 判斷路徑是否為目錄 |
islink(path) | 判斷路徑是否為鏈接 |
ismount(path) | 判斷路徑是否為掛載點(diǎn) |
文件
文件讀寫
Python中讀寫文件非常簡(jiǎn)單,只需通過open函數(shù)以合適的方式打開,然后即可操作。
with open('data.txt', 'r', encoding='utf-8') as f: data = f.read() print('contents: {}'.format(data))
open()
用于打開一個(gè)文件,并返回文件對(duì)象(打開失敗會(huì)拋出 OSError
異常);文件對(duì)象不再使用時(shí),一定要關(guān)閉(可用with語(yǔ)句保證自動(dòng)關(guān)閉)。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
參數(shù)說明:
- file: 文件路徑(相對(duì)或者絕對(duì)路徑)或文件句柄(interger)。
- mode: 文件打開模式(默認(rèn)是r)。
- buffering: 設(shè)置緩沖(0:關(guān)閉緩沖;1:只對(duì)文本文件有效,設(shè)定行緩沖;其他:設(shè)定緩沖的字節(jié)數(shù))。
- encoding: 設(shè)置編解碼模式(只對(duì)文本模式有效,如’utf-8’)。
- errors: 設(shè)定編解碼的報(bào)錯(cuò)級(jí)別:
-
strict
:默認(rèn),編解碼出錯(cuò)時(shí),拋出ValueError
異常; -
ignore
:忽略編解碼錯(cuò)誤(可能會(huì)丟失數(shù)據(jù)); -
replace
:使用替換標(biāo)識(shí)(如’?')替代無效數(shù)據(jù); -
surrogateescape
:使用私有區(qū)編碼(U+DC80 to U+DCFF)來替換錯(cuò)誤字節(jié);在處理未知編碼文件時(shí)有效; -
xmlcharrefreplace
:寫文件有效;錯(cuò)誤字節(jié)被替換為XML字符(&#nnn;
); -
backslashreplace
:使用Python’s backslashed escape sequences
替換錯(cuò)誤字節(jié); -
namereplace
: 寫文件有效;錯(cuò)誤字節(jié)被替換為\N{...}
;
-
- newline: 文本文件有效,如何處理?yè)Q行符
- closefd: 使用文件句柄時(shí),是否關(guān)閉;使用文件路徑時(shí),必須為True;
打開模式Mode(t:文本;b:二進(jìn)制):
文件對(duì)象的操作函數(shù):
文件刪除
刪除文件可以:
os.remove()/os.unlink()
- pathlib.Path.unlink()如果傳遞的不是文件,則會(huì)拋出OSError異常。
文件復(fù)制移動(dòng)
復(fù)制文件:
-
shutil.copy(src, dst)
:把文件src復(fù)制到dst中指定的位置(若dst是文件,則該文件的內(nèi)容將替換為src的內(nèi)容;若dst是目錄,則src將被復(fù)制到該目錄中); -
shutil.copy2()
:會(huì)保留文件的詳細(xì)信息;
移動(dòng)文件:
-
os.rename(src, dst)
:重命名文件; -
shutil.move(src,dst)
:將文件移動(dòng)到指定的位置。
目錄
創(chuàng)建目錄
有多種創(chuàng)建目錄的方法:
方法 | 描述 |
---|---|
os.mkdir() | 創(chuàng)建單個(gè)子目錄 |
os.makedirs() | 創(chuàng)建多次目錄,包括中間目錄 |
Pathlib.Path.mkdir() | 創(chuàng)建單個(gè)或多個(gè)目錄 |
os.makedirs(name, mode=0o777, exist_ok=False)
若目錄已存在,則拋出FileExistsError
異常;
傳遞exist_ok=True
,則目錄存在時(shí),不報(bào)錯(cuò)。
刪除目錄
有以下刪除目錄的函數(shù):
函數(shù) | 描述 |
---|---|
os.rmdir() | 刪除一個(gè)空目錄 |
pathlib.Path.rmdir() | 刪除一個(gè)空目錄 |
shutil.rmtree() | 刪除完整的目錄樹,可用于刪除非空目錄 |
rmdir在目錄不為空,則引發(fā)OSError異常。
復(fù)制目錄
-
shutil.copytree()
復(fù)制整個(gè)目錄及其子文件、目錄。 -
shutil.move(src,dst)
:將文件或目錄移動(dòng)到指定的位置。 -
os.rename(src, dst)
:重命名文件或目錄;- Windows下,若dst存在則拋出FileExistsError異常;
- Unix下,若src與dst不同時(shí)為文件或目錄會(huì)拋出IsADirectoryError/NotADirectoryError異常;重命名目錄時(shí),若dst非空,則拋出OSError異常。 枚舉目錄
枚舉目錄
列表,可通過:
-
os.scandir()
:推薦方法;返回一個(gè)包含DirEntry
迭代器; -
pathlib.Path()
對(duì)象的iterdir()
方法:返回包含目錄對(duì)象的迭代器; -
os.listdir()
:遺留方法;返回一個(gè)包含子文件(夾)名的列表;
with os.scandir('/tmp') as entries: for en in entries: if en.is_file(): print(en.name)
DirEntry
屬性與方法:
- name:文件名
- path:完整路徑名
- is_dir():是文件夾,返回
- True;is_file():是文件,返回
- True;is_symlink():是symbolic link,返回True;
-
stat():返回文件屬性信息
stat_result
;
遍歷(游走)目錄
os.walk()用于通過在目錄樹中游走輸出目錄中的文件名:os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
- top:要開始遍歷的頂層目錄;
- topdown:True,優(yōu)先遍歷top目錄;False,優(yōu)先遍歷子目錄;
- onerror:當(dāng)walk出錯(cuò)時(shí),調(diào)用的callable函數(shù);
- followlinks:是否遍歷軟連接;返回為一個(gè)三元組(root,dirs,files):
- root:當(dāng)前正在遍歷的這個(gè)文件夾(路徑)
- dirs:當(dāng)前目錄下所有目錄名列表;
- files:當(dāng)前目錄下所有文件名列表;
for root, dirs, files in os.walk(r"D:\temp"): print(root, files) # D:\temp ['add.log', 'out.yml'] # D:\temp\picture ['1.jpeg'] # D:\temp\result\log ['1.log', '2.log']
文件名模式匹配
獲取目錄列表后,要搜索和特定的模式匹配的文件:
fnmatch
nmatch模塊主要用于文件名稱的匹配,比簡(jiǎn)單的字符串匹配更強(qiáng)大,但比正則表達(dá)式稍弱。
fnmatch支持使用如下幾個(gè)通配符:
-
*
:可匹配0或多個(gè)任意字符。 -
?
:可匹配一個(gè)任意字符。 -
[字符序列]
:可匹配字符序列中的任意字符;支持中畫線表示法,如 [a-c]表示a、b和c字符中任意一個(gè)。 -
[!字符序列]
:可匹配不在字符序列中的任意字符。
for name in os.listdir('/tmp'): if fnmatch.fnmatch(name, 'log-*.txt'): print(name)
glob
glob模塊中的glob()返回所有匹配的文件路徑列表;iglob()與glob基本相同,只是返回的是迭代器(非列表)。glob.glob(pathname, *, recursive=False)
參數(shù)說明:
-
pathname:是要匹配的路徑pattern,可支持通配符
* ? []
; -
recursive:若為True,則pattern中的
**
會(huì)匹配零或多層目錄及子目錄。
如獲取當(dāng)前目錄及其子目錄下的所有py文件:
# files = glob.iglob(r"D:\temp\**\*.log", recursive=True) files = glob.iglob(r"**\*.py", recursive=True) for f in files: print(f) ## 返回文件中包含匹配的路徑; # log的返回為: # D:\temp\add.log # D:\temp\result\result.log # D:\temp\result\log\test2022.log # py的返回為 # main.py # files\file_handle.py
臨時(shí)文件與目錄
tempfile模塊用于創(chuàng)建臨時(shí)文件和目錄(程序停止運(yùn)行后會(huì)自動(dòng)刪除這些臨時(shí)文件),創(chuàng)建位置依次為:
- Windows下:
C:\TEMP
,C:\TMP
,當(dāng)前目錄; - 其他系統(tǒng):
/tmp
,/var/tmp
,/usr/tmp
,當(dāng)前目錄;
with tempfile.TemporaryFile('w+t') as fp: fp.write('Hello world!') fp.seek(0) fp.read() # 此處,文件已被刪除 tmp = '' with tempfile.TemporaryDirectory() as tmpdir: print('Created temporary directory ', tmpdir) tmp = tmpdir print(os.path.exists(tmpdir)) # 此處,目錄已被刪除
原文鏈接:https://blog.csdn.net/alwaysrun/article/details/126090483
相關(guān)推薦
- 2022-01-09 WHATWG API——url.parse()的替代方案
- 2022-04-17 Python?如何引入同級(jí)包和模塊_python
- 2022-11-19 Golang接口使用教程詳解_Golang
- 2024-04-04 linux設(shè)置串口波特率和讀取
- 2022-05-11 JPA報(bào)錯(cuò)IllegalArgumentException
- 2022-05-20 springboot心跳機(jī)制,定時(shí)任務(wù)
- 2022-11-03 C++模板超詳細(xì)介紹_C 語(yǔ)言
- 2022-11-04 Android自定義View實(shí)現(xiàn)時(shí)鐘功能_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支