Python如何一次性搞定文件讀寫處理難題
為什么要學(xué)習(xí)文件處理?
每個(gè)程序員都離不開文件處理。無論是讀取配置文件、處理Excel表格,還是保存程序運(yùn)行日志,文件操作都是必備技能。但是很多教程要么太淺顯,要么太復(fù)雜,今天我就用最通俗的語言,帶你徹底掌握Python文件處理!
基礎(chǔ)操作:文件讀寫入門
先從最基礎(chǔ)的開始。假設(shè)你有一個(gè)叫notes.txt的文本文件,想要讀取它的內(nèi)容:
# 最簡單的文件讀取
with open('notes.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
這里有個(gè)小技巧:一定要加上encoding='utf-8',不然中文就會(huì)變成亂碼,這可是我踩過的坑啊!
寫入文件也很簡單:
# 寫入文本文件
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('這是第一行\(zhòng)n')
f.write('這是第二行\(zhòng)n')
進(jìn)階技巧:批量文件處理
但是實(shí)際工作中,我們經(jīng)常需要處理多個(gè)文件。來看看這個(gè)實(shí)用的例子,批量重命名文件:
import os
def batch_rename(folder_path, old_str, new_str):
"""批量重命名文件,將文件名中的old_str替換為new_str"""
count = 0
for filename in os.listdir(folder_path):
if old_str in filename:
old_file = os.path.join(folder_path, filename)
new_file = os.path.join(folder_path, filename.replace(old_str, new_str))
os.rename(old_file, new_file)
count += 1
return count
# 使用示例
folder = '測試文件夾'
renamed = batch_rename(folder, 'old', 'new')
print(f'成功重命名了{(lán)renamed}個(gè)文件')
高級(jí)應(yīng)用:文件監(jiān)控器
這個(gè)才是真正的干貨!來看看如何寫一個(gè)文件變化監(jiān)控器,可以實(shí)時(shí)監(jiān)控文件夾的變化:
# 導(dǎo)入所需模塊
import time
from watchdog.observers import Observer # 用于監(jiān)控文件系統(tǒng)事件
from watchdog.events import FileSystemEventHandler # 文件系統(tǒng)事件處理器基類
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
"""當(dāng)監(jiān)控的文件發(fā)生修改時(shí)觸發(fā)"""
if not event.is_directory: # 僅處理文件變化,忽略目錄
print(f'文件發(fā)生變化:{event.src_path}')
def on_created(self, event):
"""當(dāng)有新文件創(chuàng)建時(shí)觸發(fā)"""
if not event.is_directory: # 僅處理文件創(chuàng)建,忽略目錄
print(f'新建文件:{event.src_path}')
def monitor_folder(path):
"""
監(jiān)控指定文件夾的變化
參數(shù):
path: 要監(jiān)控的文件夾路徑
"""
event_handler = MyHandler() # 創(chuàng)建事件處理器實(shí)例
observer = Observer() # 創(chuàng)建觀察者實(shí)例
observer.schedule(event_handler, path, recursive=False) # 設(shè)置監(jiān)控的路徑(不遞歸子目錄)
observer.start() # 啟動(dòng)監(jiān)控
try:
while True:
time.sleep(1) # 每秒檢查一次
except KeyboardInterrupt: # 捕獲Ctrl+C中斷信號(hào)
observer.stop() # 停止監(jiān)控
observer.join() # 等待observer完全停止
# 程序入口
if __name__ == '__main__':
monitor_folder('要監(jiān)控的文件夾路徑') # 傳入要監(jiān)控的文件夾路徑
這個(gè)程序可以實(shí)時(shí)監(jiān)控文件夾中的變化,比如新建文件、修改文件等。對于需要監(jiān)控日志文件或者配置文件的場景特別有用!
實(shí)戰(zhàn)小貼士
- 處理大文件時(shí),用
read()一次性讀取可能會(huì)占用太多內(nèi)存,建議使用for line in f:逐行讀取 - 寫文件時(shí)記得及時(shí)關(guān)閉,最好使用
with語句自動(dòng)處理 - 路徑操作推薦使用
os.path模塊,這樣能保證代碼在不同操作系統(tǒng)上都能正常運(yùn)行
常見問題解答
問:為什么我的文件路徑總是報(bào)錯(cuò)?答:Windows系統(tǒng)中,路徑分隔符是反斜杠``,但在Python字符串中需要寫成\,或者直接用正斜杠/,Python會(huì)自動(dòng)處理。
問:如何判斷文件是否存在?答:可以使用os.path.exists()函數(shù):
import os
if os.path.exists('文件路徑'):
print('文件存在')
else:
print('文件不存在')
文件處理是Python中非常重要的一個(gè)技能點(diǎn)。掌握了這些內(nèi)容,基本上日常工作中遇到的文件處理需求都能搞定了。
到此這篇關(guān)于Python如何一次性搞定文件讀寫處理難題的文章就介紹到這了,更多相關(guān)Python文件處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django csrf校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了Django csrf校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Python3實(shí)現(xiàn)的簡單工資管理系統(tǒng)示例
這篇文章主要介紹了Python3實(shí)現(xiàn)的簡單工資管理系統(tǒng),涉及Python文件讀寫、數(shù)據(jù)遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
ubuntu安裝sublime3并配置python3環(huán)境的方法
這篇文章主要介紹了ubuntu安裝sublime3并配置python3環(huán)境的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
淺談Python3.10 和 Python3.9 之間的差異
多年來,Python 進(jìn)行了大量升級(jí),并且在新版本中添加了許多功能。本文就詳細(xì)的介紹 一下Python3.10 和 Python3.9差異,感興趣的朋友可以了解一下2021-09-09
使用Python matplotlib作圖時(shí),設(shè)置橫縱坐標(biāo)軸數(shù)值以百分比(%)顯示
這篇文章主要介紹了使用Python matplotlib作圖時(shí),設(shè)置橫縱坐標(biāo)軸數(shù)值以百分比(%)顯示,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05

