目錄
- 1. 建立文件
- 1.1 文本文件代碼實現(xiàn)
- 1.2 代碼編寫分析
- 2. 基本的讀寫文件
- 2.1 用文件對象write(s)方法寫內(nèi)容
- 2.2 用文件對象read()方法讀取內(nèi)容
- 2.3 連續(xù)用read()方法、write()方法操作文件
- 3. 復(fù)雜的讀寫文件
- 1、一次寫入多行
- 2、一次讀一行
- 3、以列表格式讀取多行
- 4、連續(xù)讀特定字節(jié)數(shù)量的內(nèi)容
- 5、在指定位置讀內(nèi)容
- 4. 文件異常處理
- 5. 文件與路徑
- 5.1 與路徑相關(guān)的操作 獲取程序運行的當(dāng)前路徑
- 5.2 動態(tài)指定路徑下建立新文件
- 總結(jié)
文本文件具備初步存放、編輯各類數(shù)據(jù)的能力,并可以持久保留和數(shù)據(jù)共享。
1. 建立文件
建立文本文件有兩種途徑:一是通過Windows的“記事本”工具創(chuàng)建一個擴展名為“.txt”的文件,然后供程序調(diào)用。二是通過程序自動建立新文件。
1.1 文本文件代碼實現(xiàn)
newfile = "g:\\t1.txt" #定義需要建立的文本名稱和路徑
b_new_file = open(newfile,"w") #用open函數(shù)建立一個新的文本文件
b_new_file.close() #關(guān)閉文件
print("%s成功建立!"%newfile)
效果:
1.2 代碼編寫分析
文本文件的名稱
(1)文本名稱,命名要符合命名內(nèi)容,一般情況下以英文字母、數(shù)字、漢字開頭的易于閱讀的字符串組合。不能使用星號(*)等特殊符號開頭的命名。
(2)文本名稱是一個字符串,命名過程中需要考慮到轉(zhuǎn)義符號對路徑或名稱的影響。如:“g:\t1.txt”中的“\t”本身就是一個橫向制表符,如果用“g:\t1.txt”就會出錯。另一種解決字符串轉(zhuǎn)義符的方法是在字符串前加原始字符串限制符號(原生字符r或R)可以原樣輸出r“g:\t1.txt”。
(3)指定路徑必須設(shè)置(在不同的解釋器中,對于路徑的設(shè)置有區(qū)別)
用open函數(shù)建立(打開)文件
open函數(shù)屬于系統(tǒng)內(nèi)置函數(shù),支持對字符串或二進制文件的打開操作,返回可操作的文件對象。
使用格式:
open(file,mode=“w”)
file參數(shù)用于指定需要操作的文件名(可以同時只當(dāng)文件路徑);mode參數(shù)用于指定需要操作的方式。
r、w、x、a為打開文件的基本模式,對應(yīng)這只讀、只寫、新建、追加四種打開方式;b、t、+、U與基本模式組合使用,對應(yīng)二進制、文本、讀寫、通用換行符四種模式。
mode默認(rèn)值為“rt”模式,意味著對文本文件進行讀操作。目前,mode值常見可以組合的方式為“rb"、”wb“、”xb“、”ab“、”rt“、”wt“、”xt“、”at“、”r+“、”w+“、”x+“、”a+“。
用b_new_file.close()方法把新建立的文件關(guān)閉
如果不關(guān)閉新建立的文本文件,則打開的文件對象一直留存在內(nèi)存中,如果打開的文件多了,容易出現(xiàn)內(nèi)存溢出等錯誤。
2. 基本的讀寫文件
打開文本文件后,可以對文件進行基本的讀寫操作。
2.1 用文件對象write(s)方法寫內(nèi)容
f.write(s),f代表可寫方式打開文件對象;s為將要寫入文件的內(nèi)容,write()方法把s內(nèi)容寫入文件f后,返回寫入的字節(jié)數(shù)。
newfile = "g:\\t1.txt" #定義需要建立的文本名稱和路徑
b_new_file = open(newfile,"w") #用open函數(shù)建立一個新的文本文件
t_n = b_new_file.write("l like python!") #用文件對象write()方法寫字符串
b_new_file.close() #關(guān)閉文件
print("往文件里寫入%d字節(jié)內(nèi)容"%t_n)
效果:
”w“模式打開的文本文件,在寫入內(nèi)容時,第二次寫入的內(nèi)容會覆蓋第一次保存的內(nèi)容,若要解決此問題,采用”a“模式打開文件。
2.2 用文件對象read()方法讀取內(nèi)容
f.read(size),f代表可讀方式打開的文件對象;size為可選參數(shù),若指定讀取字節(jié)數(shù),則讀取指定大小字節(jié)的內(nèi)容,若沒有指定,則讀取盡可能大的內(nèi)容。
b_new_file = open(newfile,"r") #以只讀方式打開文件
tt = b_new_file.read() #用文件對象read()方法讀取內(nèi)容
print(tt)
b_new_file.close()
效果:
2.3 連續(xù)用read()方法、write()方法操作文件
b_new_file = open(newfile,"r+") #用open函數(shù)建立一個新的文本文件
tt = b_new_file.read() #用文件對象read()方法讀取內(nèi)容
print(tt)
t_n = b_new_file.write("\n三酷貓!^_^") #繼續(xù)往文件里寫入新內(nèi)容
b_new_file.close()
print("往文件里寫入%d字節(jié)內(nèi)容"%t_n)
效果:
注意:不鼓勵連續(xù)讀寫操作方法,因為存在讀寫數(shù)據(jù)不確定性問題
3. 復(fù)雜的讀寫文件
在基礎(chǔ)的讀寫存在上,可以考慮多行讀寫的操作。
1、一次寫入多行
nums = ["one","two","three","four","five","six","seven"]
t = open(r"g:\t2.txt","a") #追加打開文件
for get_one in nums:
t.write(get_one+"\n") #將每個元素循環(huán)寫入文件,行末加\n
t.close()
print("連續(xù)寫入完成")
效果:
2、一次讀一行
f.readline(s),f代表以可讀模式打開的文件;s為可選參數(shù),若設(shè)置指定大小的字節(jié),則返回相應(yīng)大小的字符串,若沒有設(shè)定,則以行單位返回字符串。
t1 = open(r"g:/t2.txt","r")
dd = 1
while dd:
dd = t1.readline() #一次讀一行
print(dd.strip()) #strip()去除字符串兩端的空字符
效果:
3、以列表格式讀取多行
t1 = open(r"g:/t2.txt","r")
t_s = t1.readlines() #以列表格式讀取多行
print(t_s)
效果:
4、連續(xù)讀特定字節(jié)數(shù)量的內(nèi)容
f = open(r"g:/t2.txt","r")
print(f.readline(2)) #讀取文件頭2個字節(jié)
print(f.readline()) #繼續(xù)讀取同一行,剩余字節(jié)
print(f.read(4)) #繼續(xù)讀取4個字節(jié)
print(f.read(4))
效果:
5、在指定位置讀內(nèi)容
5.1 f.tell(),f代表打開的文件,tell()方法返回當(dāng)前文件可以寫入讀寫的位置(字節(jié)數(shù))
f = open(r"g:/t2.txt","r")
print(f.readline(2)) #讀取文件頭2個字節(jié)
print(f.readline()) #繼續(xù)讀取同一行,剩余字節(jié)
print(f.read(4)) #繼續(xù)讀取4個字節(jié)
print(f.read(4))
print(f.tell()) #獲取執(zhí)行上述操作后的當(dāng)前位置
print(f.read(1))
print(f.tell())
效果:
5.2 f.seek(offset[,whence])
f代表以打開的文件,seek()方法重新指定將要讀寫的當(dāng)前位置。offset參數(shù)設(shè)置位置的偏移量的字節(jié)數(shù),whence參數(shù)可選,確定文件起計位置,默認(rèn)值為SEEK_SET(或0),代表從文件大的開始位置+偏移量來確定當(dāng)前位置;SEEK_SET(或1),代表當(dāng)前位置起計;SEEK_END(或2),代表從文件的結(jié)尾起計。
print(f.seek(17))
print(f.read(4))
效果:
在指定位置寫內(nèi)容
f3 = open(r"g:/t2.txt","w")
print(f3.seek(17))
f3.write('---')
f3.close()
效果:
4. 文件異常處理
f_n = r"g:\t3.txt"
flag = False
try: #異常捕捉開始
f = open(f_n,"r") #打開t3.txt文件
print(f.read())
flag=True
except: #捕捉異常
print("打開%s文件出錯,請檢查!"%f_n) #出錯提示
finally: #是否出錯,都強制執(zhí)行下列代碼
if flag: #如果文件打開順利
f.close() #則關(guān)閉文件
print("文件做關(guān)閉處理!")
else: #文件打開出現(xiàn)異常
print("程序關(guān)閉")
效果:
5. 文件與路徑
5.1 與路徑相關(guān)的操作 獲取程序運行的當(dāng)前路徑
os.path.abspath§,abspath()以字符串形式為返回平臺歸一化的絕對路徑,p為指定的路徑名稱(字符型),若p為指定”(.)“,則代表當(dāng)前路徑。
import os
print(os.path.abspath(os.path.curdir)) #返回當(dāng)前絕對路徑
效果:
判斷指定路徑下是否存在文件
import os
print(os.path.exists(r"g:\\t1.txt")) #用exists()方法判斷文件是否已經(jīng)存在
效果:
exists§方法判斷指定路徑下的文件是否存在。若存在,則返回True,若不存在,則返回False。p為指定的來路徑的文件字符串,也可以通過isfile()方法直接判斷。
判斷指定路徑是否存在
isdir§方法判斷指定路徑是否存在,p為字符串格式的路徑,存在返回True,不存在則返回False。
import os
print(os.path.isdir(r"g:\\")) #用isdir()方法判斷路徑是否存在
效果:
exists§方法也可以用來直接判斷路徑
import os
print(os.path.exists(r"g:\\")) #用exists()方法直接判斷路徑
效果:
建立文件夾(子路徑)
利用os模塊的makedirs§方法可以建立對應(yīng)的文件夾,p為字符串形式的需要建立的路徑,建立不成功,拋出OSError出錯信息;建立成功,則在對應(yīng)的路徑下將發(fā)現(xiàn)新建立的文件夾。
import os
print(os.makedirs(r"g:\\files")) #在g盤建立files文件夾
效果:
5.2 動態(tài)指定路徑下建立新文件
import os
import sys
get_cur_path = os.path.abspath(os.path.curdir)
f_n = get_cur_path+"\\files" #在當(dāng)前路徑建立子路徑files
try:
if not os.path.isdir(f_n): #確認(rèn)路徑是否存在
os.makedirs(f_n) #不存在,建立子路徑
except: #建立子路徑過程發(fā)生異常
print("子文件夾%s建立出錯!"%f_n) #提示建立出錯
sys.exit() #退出程序
f_n = f_n+"\\t3.txt"
flag = False
try:
f =open(f_n,"w")
print(f.write("ok"))
flag=True
print("文件%s寫入正常!"%f_n)
except:
print("打開%s文件出錯,請檢查!"%f_n)
finally:
if flag:
f.close()
print("文件做關(guān)閉處理!")
else:
print("程序關(guān)閉")
效果:
總結(jié)
到此這篇關(guān)于python文件處理筆記之文本文件的文章就介紹到這了,更多相關(guān)python處理文本文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python讀寫txt文本文件的操作方法全解析
- python 如何將數(shù)據(jù)寫入本地txt文本文件的實現(xiàn)方法
- python進階教程之文本文件的讀取和寫入
- python計算文本文件行數(shù)的方法
- python實現(xiàn)搜索文本文件內(nèi)容腳本
- python將多個文本文件合并為一個文本的代碼(便于搜索)
- python讀取浮點數(shù)和讀取文本文件示例
- Python文件操作,open讀寫文件,追加文本內(nèi)容實例
- python統(tǒng)計文本文件內(nèi)單詞數(shù)量的方法
- Python批量修改文本文件內(nèi)容的方法