Python文件相關(guān)操作和方法匯總大全
前言:
Python中有多個內(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ù)) |
| getmtime(path) | 返回最近文件修改時間 |
| getctime(path) | 返回文件創(chuàng)建時間 |
| getsize(path) | 返回文件大小,如果文件不存在就返回錯誤 |
文件類型判斷:
| 方法 | 說明 |
|---|---|
| isfile(path) | 判斷路徑是否為文件 |
| isdir(path) | 判斷路徑是否為目錄 |
| islink(path) | 判斷路徑是否為鏈接 |
| ismount(path) | 判斷路徑是否為掛載點 |
文件
文件讀寫
Python中讀寫文件非常簡單,只需通過open函數(shù)以合適的方式打開,然后即可操作。
with open('data.txt', 'r', encoding='utf-8') as f:
data = f.read()
print('contents: {}'.format(data))open()用于打開一個文件,并返回文件對象(打開失敗會拋出 OSError異常);文件對象不再使用時,一定要關(guān)閉(可用with語句保證自動關(guān)閉)。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
參數(shù)說明:
- file: 文件路徑(相對或者絕對路徑)或文件句柄(interger)。
- mode: 文件打開模式(默認是r)。
- buffering: 設(shè)置緩沖(0:關(guān)閉緩沖;1:只對文本文件有效,設(shè)定行緩沖;其他:設(shè)定緩沖的字節(jié)數(shù))。
- encoding: 設(shè)置編解碼模式(只對文本模式有效,如’utf-8’)。
- errors: 設(shè)定編解碼的報錯級別:
strict:默認,編解碼出錯時,拋出ValueError異常;ignore:忽略編解碼錯誤(可能會丟失數(shù)據(jù));replace:使用替換標識(如’?')替代無效數(shù)據(jù);surrogateescape:使用私有區(qū)編碼(U+DC80 to U+DCFF)來替換錯誤字節(jié);在處理未知編碼文件時有效;xmlcharrefreplace:寫文件有效;錯誤字節(jié)被替換為XML字符(&#nnn;);backslashreplace:使用Python’s backslashed escape sequences替換錯誤字節(jié);namereplace: 寫文件有效;錯誤字節(jié)被替換為\N{...};
- newline: 文本文件有效,如何處理換行符
- closefd: 使用文件句柄時,是否關(guān)閉;使用文件路徑時,必須為True;
打開模式Mode(t:文本;b:二進制):

文件對象的操作函數(shù):

文件刪除
刪除文件可以:
os.remove()/os.unlink()- pathlib.Path.unlink()如果傳遞的不是文件,則會拋出OSError異常。
文件復(fù)制移動
復(fù)制文件:
shutil.copy(src, dst):把文件src復(fù)制到dst中指定的位置(若dst是文件,則該文件的內(nèi)容將替換為src的內(nèi)容;若dst是目錄,則src將被復(fù)制到該目錄中);shutil.copy2():會保留文件的詳細信息;
移動文件:
os.rename(src, dst):重命名文件;shutil.move(src,dst):將文件移動到指定的位置。
目錄
創(chuàng)建目錄
有多種創(chuàng)建目錄的方法:
| 方法 | 描述 |
|---|---|
| os.mkdir() | 創(chuàng)建單個子目錄 |
| os.makedirs() | 創(chuàng)建多次目錄,包括中間目錄 |
| Pathlib.Path.mkdir() | 創(chuàng)建單個或多個目錄 |
os.makedirs(name, mode=0o777, exist_ok=False)
若目錄已存在,則拋出FileExistsError異常;
傳遞exist_ok=True,則目錄存在時,不報錯。
刪除目錄
有以下刪除目錄的函數(shù):
| 函數(shù) | 描述 |
|---|---|
| os.rmdir() | 刪除一個空目錄 |
| pathlib.Path.rmdir() | 刪除一個空目錄 |
| shutil.rmtree() | 刪除完整的目錄樹,可用于刪除非空目錄 |
rmdir在目錄不為空,則引發(fā)OSError異常。
復(fù)制目錄
shutil.copytree()復(fù)制整個目錄及其子文件、目錄。shutil.move(src,dst):將文件或目錄移動到指定的位置。os.rename(src, dst):重命名文件或目錄;- Windows下,若dst存在則拋出FileExistsError異常;
- Unix下,若src與dst不同時為文件或目錄會拋出IsADirectoryError/NotADirectoryError異常;重命名目錄時,若dst非空,則拋出OSError異常。 枚舉目錄
枚舉目錄
列表,可通過:
os.scandir():推薦方法;返回一個包含DirEntry迭代器;pathlib.Path()對象的iterdir()方法:返回包含目錄對象的迭代器;os.listdir():遺留方法;返回一個包含子文件(夾)名的列表;
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:當walk出錯時,調(diào)用的callable函數(shù);
- followlinks:是否遍歷軟連接;返回為一個三元組(root,dirs,files):
- root:當前正在遍歷的這個文件夾(路徑)
- dirs:當前目錄下所有目錄名列表;
- files:當前目錄下所有文件名列表;
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模塊主要用于文件名稱的匹配,比簡單的字符串匹配更強大,但比正則表達式稍弱。

fnmatch支持使用如下幾個通配符:
*:可匹配0或多個任意字符。?:可匹配一個任意字符。[字符序列]:可匹配字符序列中的任意字符;支持中畫線表示法,如 [a-c]表示a、b和c字符中任意一個。[!字符序列]:可匹配不在字符序列中的任意字符。
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中的
**會匹配零或多層目錄及子目錄。
如獲取當前目錄及其子目錄下的所有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臨時文件與目錄
tempfile模塊用于創(chuàng)建臨時文件和目錄(程序停止運行后會自動刪除這些臨時文件),創(chuàng)建位置依次為:
- Windows下:
C:\TEMP,C:\TMP,當前目錄; - 其他系統(tǒng):
/tmp,/var/tmp,/usr/tmp,當前目錄;
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))
# 此處,目錄已被刪除到此這篇關(guān)于Python文件相關(guān)操作和方法匯總大全的文章就介紹到這了,更多相關(guān)Python文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows上安裝tensorflow 詳細教程(圖文詳解)
這篇文章主要介紹了Windows上安裝TENSORFLOW 詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
pytorch實現(xiàn)seq2seq時對loss進行mask的方式
今天小編就為大家分享一篇pytorch實現(xiàn)seq2seq時對loss進行mask的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python pycharm最新版本激活碼(永久有效)附python安裝教程
PyCharm是一個多功能的集成開發(fā)環(huán)境,只需要在pycharm中創(chuàng)建python file就運行python,并且pycharm內(nèi)置完備的功能,這篇文章給大家介紹python pycharm激活碼最新版,需要的朋友跟隨小編一起看看吧2020-01-01
Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法
今天小編就為大家分享一篇Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python實現(xiàn)將漢字轉(zhuǎn)換成漢語拼音的庫
這篇文章主要介紹了python實現(xiàn)將漢字轉(zhuǎn)換成漢語拼音的庫,涉及Python調(diào)用word.data字段實現(xiàn)將漢字轉(zhuǎn)換成拼音的功能,非常具有實用價值,需要的朋友可以參考下2015-05-05
Python中使用logging和traceback模塊記錄日志和跟蹤異常
今天小編就為大家分享一篇關(guān)于Python中使用logging和traceback模塊記錄日志和跟蹤異常,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04

