一文帶你搞懂Python中的文件操作
一、文件的編碼
計算機中有許多可用編碼:
- UTF-8
- GBK
- Big5
- 等
UTF-8是目前全球通用的編碼格式
除非有特殊需求,否則,一律以UTF-8格式進行文件編碼即可。
二、文件的讀取
2.1 open()打開函數(shù)
注意:此時的f是open函數(shù)的文件對象,對象是Python中一種特殊的數(shù)據(jù)類型,擁有屬性和方法,可以使用對象.屬性或?qū)ο?方法對其進行訪問,后續(xù)面向?qū)ο笳n程會給大家進行詳細的介紹。
name:是要打開的目標文件名的字符串(可以包含文件所在的具體路徑)。
mode:設置打開文件的模式(訪問模式):只讀、寫入、追加等。
encoding:編碼格式(推薦使用UTF-8)
open(name, mode, encoding)
例子:
f = open('./test.txt', 'r', encoding='utf-8')2.2 mode常用的三種基礎訪問模式
| 模式 | 描述 |
|---|---|
| f | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。 |
| w | 打開一個文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,原有內(nèi)容會被刪除 。如果該文件不存在,創(chuàng)建新文件。 |
| a | 打開一個文件用于追加。如果該文件已存在,新的內(nèi)容將會被寫入到已有內(nèi)容之后。 如果該文件不存在,創(chuàng)建新文件進行寫入。 |
2.3 讀操作相關方法
操作匯總
| 操作 | 功能 |
|---|---|
| 文件對象 = open(file, mode, encoding) | 打開文件獲得文件對象 |
| 文件對象.read(num) | 讀取指定長度字節(jié)<br/>不指定num讀取文件全部 |
| 文件對象.readline() | 讀取一行 |
| 文件對象.readlines() | 讀取全部行,得到列表 |
| for line in 文件對象 | for循環(huán)文件行,一次循環(huán)得到一行數(shù)據(jù) |
| 文件對象.close() | 關閉文件對象 |
| with open() as f | 通過with open語法打開文件,可以自動關閉 |
2.3.1 read()方法:
num表示要從文件中讀取的數(shù)據(jù)的長度(單位是字節(jié)),如果沒有傳入num,那么就表示讀取文件中所有的數(shù)據(jù)。
文件對象.read(num)
2.3.2 readlines()方法
readlines可以按照行的方式把整個文件中的內(nèi)容進行一次性讀取,并且返回的是一個列表,其中每一行的數(shù)據(jù)為一個元素。
f = open('python.txt')
content = f.readlines()
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)
# 關閉文件
f.close()例:
readline()方法:一次讀取一行內(nèi)容
f = open('python.txt')
content = f.readline()
print(f'第一行:{content}')
content = f.readline()
print(f'第二行:{content}')
# 關閉文件
f.close()for循環(huán)讀取文件行:
for line in open("python.txt", "r"):
print(line)
# 每一個line臨時變量,就記錄了文件的一行數(shù)據(jù)2.3.3 close() 關閉文件對象
f = open("python.txt", "r")
f.close()
# 最后通過close,關閉文件對象,也就是關閉對文件的占用
# 如果不調(diào)用close,同時程序沒有停止運行,那么這個文件將一直被Python程序占用。2.3.4 with open 語法
with open("python.txt", "r") as f:
f.readlines()
# 通過在with open的語句塊中對文件進行操作
# 可以在操作完成后自動關閉close文件,避免遺忘掉close方法案例:通過文件讀取操作,讀取此文件,統(tǒng)計itheima單詞出現(xiàn)的次數(shù)
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima
index = 0
with open('./test.txt', 'r', encoding='utf-8') as f:
for line in f:
line = line.strip()
# print(line)
str = line.split(' ')
print(str)
for val in str:
if val == 'it':
index += 1
print(f'index:{index}')三、文件的寫入
寫操作快速入門
注意:
直接調(diào)用write,內(nèi)容并未真正寫入文件,而是會積攢在程序的內(nèi)存中,稱之為緩沖區(qū)
- 當調(diào)用flush的時候,內(nèi)容會真正寫入文件
- 這樣做是避免頻繁的操作硬盤,導致效率下降(攢一堆,一次性寫磁盤)
- 文件如果不存在,使用”w”模式,會創(chuàng)建新文件
- 文件如果存在,使用”w”模式,會將原有內(nèi)容清空
例:
# 1. 打開文件
f = open('python.txt', 'w')
# 2.文件寫入
f.write('hello world')
# 3. 內(nèi)容刷新
f.flush()四、文件的追加
追加寫入操作快速入門
注意:
- a模式,文件不存在會創(chuàng)建文件
- a模式,文件存在會在最后,追加寫入文件
案例演示:
# 1. 打開文件,通過a模式打開即可
f = open('python.txt', 'a')
# 2.文件寫入
f.write('hello world')
# 3. 內(nèi)容刷新
f.flush()五、文件操作綜合案例
完成文件備份案例:
bill.txt name,date,money,type,remarks 周杰輪,2022-01-01,100000,消費,正式 周杰輪,2022-01-02,300000,收入,正式 周杰輪,2022-01-03,100000,消費,測試 林俊節(jié),2022-01-01,300000,收入,正式 林俊節(jié),2022-01-02,100000,消費,測試 林俊節(jié),2022-01-03,100000,消費,正式 林俊節(jié),2022-01-04,100000,消費,測試 林俊節(jié),2022-01-05,500000,收入,正式 張學油,2022-01-01,100000,消費,正式 張學油,2022-01-02,500000,收入,正式 張學油,2022-01-03,900000,收入,測試 王力鴻,2022-01-01,500000,消費,正式 王力鴻,2022-01-02,300000,消費,測試 王力鴻,2022-01-03,950000,收入,正式 劉德滑,2022-01-01,300000,消費,測試 劉德滑,2022-01-02,100000,消費,正式 劉德滑,2022-01-03,300000,消費,正式
f2 = open('bill.txt.bak', 'a', encoding="utf-8")
with open('bill', 'r', encoding="UTF-8") as f:
for line in f:
line = line.strip()
str = line.split(',')
if str[4] == '測試':
continue
else:
f2.write(f'{line}\n')
f2.close()到此這篇關于一文帶你搞懂Python中的文件操作的文章就介紹到這了,更多相關Python文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
深入探討Python復合型數(shù)據(jù)的常見陷阱與避免方法
在Python中,復合型數(shù)據(jù)(例如列表、元組、集合和字典)是非常常用的數(shù)據(jù)類型,本文將深入探討Python復合型數(shù)據(jù)的常見陷阱,并提供一些避免這些問題的實用建議和技巧,希望對大家有所幫助2024-03-03
Spring實戰(zhàn)之使用util:命名空間簡化配置操作示例
這篇文章主要介紹了Spring實戰(zhàn)之使用util:命名空間簡化配置操作,結合實例形式分析了Spring使用util:命名空間簡化配置操作的具體步驟與相關操作注意事項,需要的朋友可以參考下2019-12-12
Python中break語句和continue語句的用法講解
在Python中,break語句和continue語句一般用于循環(huán)語句中,這篇文章主要介紹了Python中break語句和continue語句的用法小結,需要的朋友可以參考下2022-12-12
淺談keras保存模型中的save()和save_weights()區(qū)別
這篇文章主要介紹了淺談keras保存模型中的save()和save_weights()區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python+opencv 讀取文件夾下的所有圖像并批量保存ROI的方法
今天小編就為大家分享一篇python+opencv 讀取文件夾下的所有圖像并批量保存ROI的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

