淺談PYTHON 關(guān)于文件的操作
1.打開文件:
f=open(r'E:\PythonProjects\test7\a.txt',mode='rt',encoding='utf-8')
以上三個(gè)單引號(hào)內(nèi)分別表示:要打開的文件的路徑,mode為文件打開方式具體介紹在下文,encoding為文件的字符編碼,一般默認(rèn)為utf-8
2.讀寫文件:
data=f.read() # 讀文件
f.write() # 寫文件
3.關(guān)閉文件:
f.close()
4.為了簡便,一般采用上下文的方法進(jìn)行文件操作,可不用關(guān)閉文件
with open('a.txt',mode='rt',encoding='utf-8') as f:
data=f.read()
print(data)
with open('a.txt',mode='wt',encoding='utf-8') as f:
f.write('hello world')
5.控制文件讀寫的操作:
r:(默認(rèn)模式):只讀:以該模式打開文件時(shí),若文件不存在則報(bào)錯(cuò),若文件存在,則文件指針在文件開頭,即從文件開頭開始讀文件
w:只寫:以該模式打開文件時(shí),若文件不存在則創(chuàng)建一個(gè)文件,如文件存在,則清空文件內(nèi)容,文件指針移到開頭
a:追加寫:以該模式打開文件時(shí),若文件不存在則創(chuàng)建一個(gè)文件,如文件存在,則將文件指針移到文件末尾,在文件末尾寫入新的內(nèi)容
6.控制文件讀寫內(nèi)容的模式:(t 和 b都不能單獨(dú)使用,必須與r,w,a結(jié)合使用)
t:(默認(rèn)):無論讀寫都是以字符為單位,只能識(shí)別文本文件,必須要制定encoding
b:無論讀寫都是以字節(jié)為單位,可以識(shí)別所有文件,一定不能指定encoding
7.文件的拷貝
with open ('a.txt',mode='rb') as af,\
open('b.txt',mode='wb') as bf:
data=af.read
f.write(data)
執(zhí)行程序后,打開文件,即可發(fā)現(xiàn)文件已成功拷貝,這里使用 b 而不是用 t 模式,是因?yàn)槲募卸喾N格式
8.文件的修改:
文件的修改是在硬盤上實(shí)現(xiàn)文件的覆蓋,相當(dāng)于一個(gè)新的文件以舊的文件名來命名的; 文件的修改有倆種方式,分別適用于不同的情景
方式一(適用于容量小的文件):這種方式的原理是:創(chuàng)建一個(gè)新的文件,將舊文件的內(nèi)容拷貝到新的文件中;這樣內(nèi)存里就存在倆個(gè)文件,故不適用于容量大的文件,具體代碼見下方 View
with open('a.txt',mode='rt',encoding='utf-8') as f:
data=f.read()
data_new=data.replace('yang', 'yv')
with open('b.txt',mode='wt',encoding='utf-8')as p:
p.write(data_new)
方式二(適用于容量大的文件):此方式的原理為:讀取舊文件的一行內(nèi)容,修改后寫到臨時(shí)文件中,循環(huán)往復(fù)直到寫完,然后將源文件刪除,將臨時(shí)文件命名為源文件名.這種方式在內(nèi)存中只存在2行文件,節(jié)省內(nèi)存,可用于大文件
import os
with open('b.txt',mode='rt',encoding='utf-8') as f,\
open('.b.txt.swap',mode='wt',encoding='utf-8') as p:
for line in f:
p.write(line.replace('yv','yang'))
# 調(diào)用replace方法,將源文件中的'yv',換成'yang'
os.remove('b.txt')
os.rename('.b.txt.swap','b.txt')
9. 文件的階段:truncate(n)
將文件中n個(gè)字節(jié)后內(nèi)容全刪了,當(dāng) n 不存在時(shí),即刪除文件全部內(nèi)容
10.文件內(nèi)指針的移動(dòng)
f.seek(): 指針的移動(dòng)是以字節(jié)為單位的
seek 有三種模式:
0:(默認(rèn)模式) 指針在文件開頭,只有在 0 模式可以在 t 模式下用,也可以在 b 模式下用,而 1 ,2 模式只能在 b 模式下使用
1:指針在當(dāng)前位置
2:指針在文件末尾
以下為具體事例:
# 0
with open('a.txt',mode='rt',encoding='utf-8')as f:
f.seek(3,0)
print(f.tell()) # 指針當(dāng)前位置
print(f.read()) # 從指針后讀出所有內(nèi)容
# 1 參照指針當(dāng)前位置
with open('a.txt',mode='rb')as f:
f.read(2)
f.seek(4,1)
print(f.tell())
print(f.read().decode('utf-8'))
# 2 參照文件末尾
with open('a.txt',mode='rb')as f:
f.seek(-5,2)
print(f.tell())
print(f.read().decode('utf-8'))
當(dāng) seek處于 2 模式時(shí),可以將文件中新加入的內(nèi)容打印出來,具體代碼如下:
# 另一個(gè)文件進(jìn)行寫操作,寫的代碼如下:
with open('a.txt',mode='at',encoding='utf-8')as f:
f.write('hello world\n')
# 每在文件中寫入新的內(nèi)容,都打印出來,以下代碼執(zhí)行打印操作:
import time
with open('a.txt',mode='rb')as f:
f.seek(0,2)
while True:
line=f.readline() # readline 可以讀取沒有內(nèi)容的部分
# print(line.decode('utf-8'))
if len(line)==0:
time.sleep(0.1)
else:
print(line.decode('utf-8'))
以上所述是小編給大家介紹的PYTHON 關(guān)于文件的操作詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
python讀取word 中指定位置的表格及表格數(shù)據(jù)
這篇文章主要介紹了python讀取word 中指定位置的表格及表格數(shù)據(jù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-10-10
利用Python實(shí)現(xiàn)批量打包程序的工具
auto-py-to-exe與pyinstaller都無法直接一次性打包多個(gè)程序,想打包多個(gè)程序需要重新操作一遍。所以本文將用Python實(shí)現(xiàn)批量打包程序的工具,感興趣的可以了解一下2022-07-07
Django接受前端數(shù)據(jù)的幾種方法總結(jié)
下面小編就為大家?guī)硪黄狣jango接受前端數(shù)據(jù)的幾種方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
解決Pycharm后臺(tái)indexing導(dǎo)致不能run的問題
今天小編就為大家分享一篇解決Pycharm后臺(tái)indexing導(dǎo)致不能run的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python opencv將表格圖片按照表格框線分割和識(shí)別
這篇文章主要介紹了python opencv將表格圖片按照表格框線分割和識(shí)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Python?sklearn?中的?make_blobs()?函數(shù)示例詳解
make_blobs()?是?sklearn.datasets中的一個(gè)函數(shù),這篇文章主要介紹了Python?sklearn?中的?make_blobs()?函數(shù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

