<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
Python中有多個內建模組來操作檔案與目錄(os、os.path、shutil、pathlib等等)。
os.path模組主要用於獲取檔案的屬性,包含以下幾種常用方法:
路徑操作:
print(os.path.splitext('.info')) # ('.info', '') print(os.path.splitext('test.txt')) # ('test', '.txt') print(os.path.splitext(r'c:tmptest.txt')) # ('c:\tmp\test', '.txt')
屬性操作:
方法 | 說明 |
---|---|
getatime(path) | 返回最近存取時間(浮點型秒數) |
getmtime(path) | 返回最近檔案修改時間 |
getctime(path) | 返回檔案建立時間 |
getsize(path) | 返回檔案大小,如果檔案不存在就返回錯誤 |
檔案型別判斷:
方法 | 說明 |
---|---|
isfile(path) | 判斷路徑是否為檔案 |
isdir(path) | 判斷路徑是否為目錄 |
islink(path) | 判斷路徑是否為連結 |
ismount(path) | 判斷路徑是否為掛載點 |
Python中讀寫檔案非常簡單,只需通過open函數以合適的方式開啟,然後即可操作。
with open('data.txt', 'r', encoding='utf-8') as f: data = f.read() print('contents: {}'.format(data))
open()
用於開啟一個檔案,並返回檔案物件(開啟失敗會丟擲 OSError
異常);檔案物件不再使用時,一定要關閉(可用with語句保證自動關閉)。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
引數說明:
strict
:預設,編解碼出錯時,丟擲ValueError
異常;ignore
:忽略編解碼錯誤(可能會丟失資料);replace
:使用替換標識(如’?')替代無效資料;surrogateescape
:使用私有區編碼(U+DC80 to U+DCFF)來替換錯誤位元組;在處理未知編碼檔案時有效;xmlcharrefreplace
:寫檔案有效;錯誤位元組被替換為XML字元(&#nnn;
);backslashreplace
:使用Python’s backslashed escape sequences
替換錯誤位元組;namereplace
: 寫檔案有效;錯誤位元組被替換為N{...}
;開啟模式Mode(t:文字;b:二進位制):
檔案物件的操作函數:
刪除檔案可以:
os.remove()/os.unlink()
複製檔案:
shutil.copy(src, dst)
:把檔案src複製到dst中指定的位置(若dst是檔案,則該檔案的內容將替換為src的內容;若dst是目錄,則src將被複制到該目錄中);shutil.copy2()
:會保留檔案的詳細資訊;移動檔案:
os.rename(src, dst)
:重新命名檔案;shutil.move(src,dst)
:將檔案移動到指定的位置。有多種建立目錄的方法:
方法 | 描述 |
---|---|
os.mkdir() | 建立單個子目錄 |
os.makedirs() | 建立多次目錄,包括中間目錄 |
Pathlib.Path.mkdir() | 建立單個或多個目錄 |
os.makedirs(name, mode=0o777, exist_ok=False)
若目錄已存在,則丟擲FileExistsError
異常;
傳遞exist_ok=True
,則目錄存在時,不報錯。
有以下刪除目錄的函數:
函數 | 描述 |
---|---|
os.rmdir() | 刪除一個空目錄 |
pathlib.Path.rmdir() | 刪除一個空目錄 |
shutil.rmtree() | 刪除完整的目錄樹,可用於刪除非空目錄 |
rmdir在目錄不為空,則引發OSError異常。
shutil.copytree()
複製整個目錄及其子檔案、目錄。shutil.move(src,dst)
:將檔案或目錄移動到指定的位置。os.rename(src, dst)
:重新命名檔案或目錄;列表,可通過:
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
屬性與方法:
stat_result
;os.walk()用於通過在目錄樹中游走輸出目錄中的檔名:os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
for root, dirs, files in os.walk(r"D:temp"): print(root, files) # D:temp ['add.log', 'out.yml'] # D:temppicture ['1.jpeg'] # D:tempresultlog ['1.log', '2.log']
獲取目錄列表後,要搜尋和特定的模式匹配的檔案:
nmatch模組主要用於檔名稱的匹配,比簡單的字串匹配更強大,但比正規表示式稍弱。
fnmatch支援使用如下幾個萬用字元:
*
:可匹配0或多個任意字元。?
:可匹配一個任意字元。[字元序列]
:可匹配字元序列中的任意字元;支援中畫線表示法,如 [a-c]表示a、b和c字元中任意一個。[!字元序列]
:可匹配不在字元序列中的任意字元。for name in os.listdir('/tmp'): if fnmatch.fnmatch(name, 'log-*.txt'): print(name)
glob模組中的glob()返回所有匹配的檔案路徑列表;iglob()與glob基本相同,只是返回的是迭代器(非列表)。glob.glob(pathname, *, recursive=False)
引數說明:
* ? []
;**
會匹配零或多層目錄及子目錄。如獲取當前目錄及其子目錄下的所有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:tempadd.log # D:tempresultresult.log # D:tempresultlogtest2022.log # py的返回為 # main.py # filesfile_handle.py
tempfile模組用於建立臨時檔案和目錄(程式停止執行後會自動刪除這些臨時檔案),建立位置依次為:
C:TEMP
,C:TMP
,當前目錄;/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)) # 此處,目錄已被刪除
到此這篇關於Python檔案相關操作和方法彙總大全的文章就介紹到這了,更多相關Python檔案操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45