Python 文件操作大全
打開文件
在讀寫文件前需要先打開文件
用 open 打開一個文件
f = open('d:/MyComputer/text.txt','r')
print(f)
print(type(f))
"""
運(yùn)行結(jié)果
<_io.TextIOWrapper name='d:/My Computer/text.txt' mode='r' encoding='cp936'>
<class '_io.TextIOWrapper'>
"""- 前面一個參數(shù)是指:需要打開哪個文件
- 后面一個參數(shù)是指:打開方式
r:read,按照讀方式打開w:write,按照寫方式打開a:append,按照寫方式打開,把內(nèi)容寫到原有文件內(nèi)容的末尾
open的返回值是一個文件對象,f相當(dāng)于是file的縮寫
- 文件的內(nèi)容,是在硬盤上的
- 此處的文件對象,則是內(nèi)存上的一個變量
- 后續(xù)讀寫文件操作,都是拿著這個文件對象來進(jìn)行操作的
此處的文件對象就像一個“遙控器”一樣,計算機(jī)中,也把這樣的遠(yuǎn)程操控的“遙控器”稱為“句柄”(handler)
關(guān)閉文件
文件在打開完之后,使用完之后,一定要關(guān)閉!
打開文件,其實(shí)是在申請一定的系統(tǒng)資源。不再使用文件的時候,資源就應(yīng)該及時釋放
否則就可能造成文件資源泄露,進(jìn)一步導(dǎo)致其他部分的代碼無法順利打開文件了
正是因?yàn)橐粋€系統(tǒng)的資源是有限的,因此一個程序能打開的文件個數(shù)也是有上限的
f.close()
文件打開的上限
# 文件打開的上限
FIle = []
count = 0
while True:
f = open('d:/My Computer/text.txt')
first.append(f)
count += 1
print(f'打開文件的個數(shù):{count}')
- 在系統(tǒng)中,可以通過一些設(shè)置項(xiàng),來配置能打開文件的最大數(shù)目
- 但無論配置多少,都不是無窮無盡的,所以需要記得及時關(guān)閉文件,釋放資源
- 這里將文件對象放入數(shù)組
File中,是為了避免產(chǎn)生垃圾回收- 垃圾回收(
GC)是Python的一個重要機(jī)制,自動把不用的變量給釋放掉 - 如果不將每次打開的文件對象放入
FIle中,那么前面打開的文件對象就會由于沒有使用而被自動釋放,最后導(dǎo)致文件在不關(guān)閉的情況下可以一直打開
- 垃圾回收(
寫文件
使用 r 方式打開文件
# 使用 read 方式打開文件,再進(jìn)行寫操作
f = open('d:/My Computer/text.txt','r')
f.write('hello')
f.close()
文件會拋出異常

使用 w 的方式打開文件
# 使用 write 來實(shí)現(xiàn)寫文件的操作
# 使用 read 方式打開文件,再進(jìn)行寫操作
f = open('d:/My Computer/text.txt','w')
f.write('hello')
f.close()
f = open('d:/My Computer/text.txt','w')
f.write('world')
f.close()
- 最后所打開的文件中寫入了‘
world’ - 如果使用
w打開文件之后,會清空原文件中的內(nèi)容,再進(jìn)行后續(xù)寫操作
使用 a 的方式打開文件
# 使用 read 方式打開文件,再進(jìn)行寫操作
f = open('d:/My Computer/text.txt','w')
f.write('hello')
f.close()
f = open('d:/My Computer/text.txt','a')
f.write('world')
f.close()此時原有內(nèi)容不變,寫入的內(nèi)容會存在于之前文件內(nèi)容的末尾(追加寫)

讀文件
中文和英文類似,在計算機(jī)中,都是使用“數(shù)字”來表示字符的。但具體是那個數(shù)字對應(yīng)哪個漢字是有多個版本的,主流的是:
GBKUTF8
在實(shí)際開發(fā)的時候,就需要保證,文件內(nèi)容的編碼方式和代碼中操作文件的編碼方式是匹配的,所以需要再打開文件的時候指定編碼方式
按字符數(shù)量讀取

# 按字符數(shù)量來讀取
f = open('d:/My Computer/text.txt','r',encoding='utf8')
result = f.read(5)
print(result)
f.close()
"""
運(yùn)行結(jié)果
床前明月光
"""按行來讀取
最簡單的方法,就是直接使用 for 循環(huán)
# 按行讀取
f = open('d:/My Computer/text.txt','r',encoding='utf8')
for line in f:
print(f'line = {line}')
f.close()
"""
運(yùn)行結(jié)果
line = 床前明月光
line = 疑是地上霜
line = 舉頭望明月
line = 低頭思故鄉(xiāng)
"""- 之所以多了空行,是因?yàn)楸緛碜x取到的文件內(nèi)容(這一行內(nèi)容,末尾就帶有
\n) - 此處使用
print打印,又會自動添加換行的行為 - 可以給
print再多設(shè)定個參數(shù),修改print的自動換行行為
# 按行讀取
f = open('d:/My Computer/text.txt','r',encoding='utf8')
for line in f:
print(f'line = {line}', end = '')
f.close()
"""
運(yùn)行結(jié)果
line = 床前明月光
line = 疑是地上霜
line = 舉頭望明月
line = 低頭思故鄉(xiāng)
"""end參數(shù)就是表示每次打印之后要在末尾加個啥- 默認(rèn)是
\n - 修改成‘ ’,也就是什么都不加
- 默認(rèn)是
直接讀取全部內(nèi)容
使用 readlines 的方法,直接把整個文件所有的內(nèi)容都讀出來,并且按照行組織到一個列表中
# 直接讀完所有內(nèi)容,并且按行進(jìn)行組織
f = open('d:/My Computer/text.txt', 'r', encoding='utf8')
lines = f.readlines()
print(lines)
f.close()
"""
運(yùn)行結(jié)果
['床前明月光\n', '疑是地上霜\n', '舉頭望明月\n', '低頭思故鄉(xiāng)']
"""- 一次全部讀完更省時間
上下文管理器
打開文件之后, 是容易忘記關(guān)閉的,Python 提供了上下文管理器,來幫助程序猿自動關(guān)閉文件
- 使用
with語句打開文件 - 當(dāng)
with內(nèi)部的代碼塊執(zhí)行完畢后,就會自動調(diào)用關(guān)閉方法
with open('d:/My Computer/text.txt','r',encoding='utf8') as f:
# 進(jìn)行文件處理的邏輯
- 上下文管理器起到的效果
- 當(dāng)
with對應(yīng)的代碼塊執(zhí)行結(jié)束后,就會自動執(zhí)行f的close - 將
close委托給了with來執(zhí)行,就不用擔(dān)心自己忘記close了
- 當(dāng)
到此這篇關(guān)于Python 文件操作大全的文章就介紹到這了,更多相關(guān)Python 文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)連通域標(biāo)記算法
如果把圖像分為前景和背景兩部分,那么連通域就是連通在一起的前景,這種關(guān)系對于二值圖像來說比較明顯,下面我們就來了解一下連通域標(biāo)記算法原理及其Python實(shí)現(xiàn)吧2023-12-12
python使用selenium操作瀏覽器的實(shí)現(xiàn)示例
Selenium是一個模擬瀏覽器瀏覽網(wǎng)頁的工具,主要用于測試網(wǎng)站的自動化測試工具,本文主要介紹了python使用selenium操作瀏覽器的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-01-01
Python 中如何使用 virtualenv 管理虛擬環(huán)境
這篇文章主要介紹了Python 中使用 virtualenv 管理虛擬環(huán)境的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01

