在這個世界上,人們每天都在用 Python 完成著不同的工作。而文件操作,則是大家最常需要解決的任務之一。使用 Python,你可以輕松為他人生成精美的報表,也可以用短短幾行代碼快速解析、整理上萬份數據文件。
當我們編寫與文件相關的代碼時,通常會關注這些事情: 我的代碼是不是足夠快?我的代碼有沒有事半功倍的完成任務? 在這篇文章中,我會與你分享與之相關的幾個編程建議。我會向你推薦一個被低估的 Python 標準庫模塊、演示一個讀取大文件的最佳方式、最后再分享我對函數設計的一點思考。
下面,讓我們進入第一個“模塊安利”時間吧。
注意: 因為不同操作系統的文件系統大不相同,本文的主要編寫環境為 Mac OS/Linux 系統,其中一些代碼可能并不適用于 Windows 系統。
建議一:使用 pathlib 模塊
如果你需要在 Python 里進行文件處理,那么標準庫中的
os
和
os.path
兄弟倆一定是你無法避開的兩個模塊。在這兩個模塊里,有著非常多與文件路徑處理、文件讀寫、文件狀態查看相關的工具函數。
讓我用一個例子來展示一下它們的使用場景。有一個目錄里裝了很多數據文件,但是它們的后綴名并不統一,既有
.txt
,又有
.csv
。我們需要把其中以
.txt
結尾的文件都修改為
.csv
后綴名。
我們可以寫出這樣一個函數:
在學習過程中有什么不懂得可以加我的
python學習交流扣扣qun,784758214
群里有不錯的學習視頻教程、開發工具與電子書籍。
與你分享python企業當下人才需求及怎么從零基礎學習好python,和學習什么內容
1. `import os`
2. `import os.path`
5. `def unify_ext_with_os_path(path):`
6. `"""統一目錄下的 .txt 文件名后綴為 .csv`
7. `"""`
8. `for filename in os.listdir(path):`
9. `basename, ext = os.path.splitext(filename)`
10. `if ext == '.txt':`
11. `abs_filepath = os.path.join(path, filename)`
12. `os.rename(abs_filepath, os.path.join(path, f'{basename}.csv'))`
讓我們看看,上面的代碼一共用到了哪些與文件處理相關的函數:
-
os.listdir(path)
:列出 path 目錄下的所有文件(含文件夾) -
os.path.splitext(filename)
:切分文件名里面的基礎名稱和后綴部分 -
os.path.join(path,filename)
:組合需要操作的文件名為絕對路徑 -
os.rename(...)
:重命名某個文件
上面的函數雖然可以完成需求,但說句實話,即使在寫了很多年 Python 代碼后,我依然覺得: 這些函數不光很難記,而且最終的成品代碼也不怎么討人喜歡。
使用 pathlib 模塊改寫代碼
為了讓文件處理變得更簡單,Python 在 3.4 版本引入了一個新的標準庫模塊:pathlib。它基于面向對象思想設計,封裝了非常多與文件操作相關的功能。如果使用它來改寫上面的代碼,結果會大不相同。
使用 pathlib 模塊后的代碼:
1. `from pathlib import Path`
3. `def unify_ext_with_pathlib(path):`
4. `for fpath in Path(path).glob('*.txt'):`
5. `fpath.rename(fpath.with_suffix('.csv'))`
和舊代碼相比,新函數只需要兩行代碼就完成了工作。而這兩行代碼主要做了這么幾件事:
-
首先使用 Path(path) 將字符串路徑轉換為
Path
對象 -
調用 .glob('*.txt') 對路徑下所有內容進行模式匹配并以生成器方式返回,結果仍然是
Path
對象,所以我們可以接著做后面的操作 -
使用 .with_suffix('.csv') 直接獲取使用新后綴名的文件全路徑
- 調用 .rename(target) 完成重命名
相比
os
和
os.path
,引入
pathlib
模塊后的代碼明顯更精簡,也更有整體統一感。所有文件相關的操作都是一站式完成。
其他用法
除此之外,pathlib 模塊還提供了很多有趣的用法。比如使用
/
運算符來組合文件路徑:
1. `#
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
