文本文件具備初步存放、編輯各類數據的能力,并可以持久保留和數據共享。
1. 建立文件
建立文本文件有兩種途徑:一是通過windows的“記事本”工具創建一個擴展名為“.txt”的文件,然后供程序調用。二是通過程序自動建立新文件。
1.1 文本文件代碼實現
1
2
3
4
|
newfile = "g:\\t1.txt" #定義需要建立的文本名稱和路徑 b_new_file = open (newfile, "w" ) #用open函數建立一個新的文本文件 b_new_file.close() #關閉文件 print ( "%s成功建立!" % newfile) |
效果:
1.2 代碼編寫分析
文本文件的名稱
(1)文本名稱,命名要符合命名內容,一般情況下以英文字母、數字、漢字開頭的易于閱讀的字符串組合。不能使用星號(*)等特殊符號開頭的命名。
(2)文本名稱是一個字符串,命名過程中需要考慮到轉義符號對路徑或名稱的影響。如:“g:\t1.txt”中的“\t”本身就是一個橫向制表符,如果用“g:\t1.txt”就會出錯。另一種解決字符串轉義符的方法是在字符串前加原始字符串限制符號(原生字符r或r)可以原樣輸出r“g:\t1.txt”。
(3)指定路徑必須設置(在不同的解釋器中,對于路徑的設置有區別)
用open函數建立(打開)文件
open函數屬于系統內置函數,支持對字符串或二進制文件的打開操作,返回可操作的文件對象。
使用格式:
open(file,mode=“w”)
file參數用于指定需要操作的文件名(可以同時只當文件路徑);mode參數用于指定需要操作的方式。
r、w、x、a為打開文件的基本模式,對應這只讀、只寫、新建、追加四種打開方式;b、t、+、u與基本模式組合使用,對應二進制、文本、讀寫、通用換行符四種模式。
mode默認值為“rt”模式,意味著對文本文件進行讀操作。目前,mode值常見可以組合的方式為“rb"、”wb“、”xb“、”ab“、”rt“、”wt“、”xt“、”at“、”r+“、”w+“、”x+“、”a+“。
用b_new_file.close()方法把新建立的文件關閉
如果不關閉新建立的文本文件,則打開的文件對象一直留存在內存中,如果打開的文件多了,容易出現內存溢出等錯誤。
2. 基本的讀寫文件
打開文本文件后,可以對文件進行基本的讀寫操作。
2.1 用文件對象write(s)方法寫內容
f.write(s),f代表可寫方式打開文件對象;s為將要寫入文件的內容,write()方法把s內容寫入文件f后,返回寫入的字節數。
1
2
3
4
5
|
newfile = "g:\\t1.txt" #定義需要建立的文本名稱和路徑 b_new_file = open (newfile, "w" ) #用open函數建立一個新的文本文件 t_n = b_new_file.write( "l like python!" ) #用文件對象write()方法寫字符串 b_new_file.close() #關閉文件 print ( "往文件里寫入%d字節內容" % t_n) |
效果:
”w“模式打開的文本文件,在寫入內容時,第二次寫入的內容會覆蓋第一次保存的內容,若要解決此問題,采用”a“模式打開文件。
2.2 用文件對象read()方法讀取內容
f.read(size),f代表可讀方式打開的文件對象;size為可選參數,若指定讀取字節數,則讀取指定大小字節的內容,若沒有指定,則讀取盡可能大的內容。
1
2
3
4
|
b_new_file = open (newfile, "r" ) #以只讀方式打開文件 tt = b_new_file.read() #用文件對象read()方法讀取內容 print (tt) b_new_file.close() |
效果:
2.3 連續用read()方法、write()方法操作文件
1
2
3
4
5
6
|
b_new_file = open (newfile, "r+" ) #用open函數建立一個新的文本文件 tt = b_new_file.read() #用文件對象read()方法讀取內容 print (tt) t_n = b_new_file.write( "\n三酷貓!^_^" ) #繼續往文件里寫入新內容 b_new_file.close() print ( "往文件里寫入%d字節內容" % t_n) |
效果:
注意:不鼓勵連續讀寫操作方法,因為存在讀寫數據不確定性問題
3. 復雜的讀寫文件
在基礎的讀寫存在上,可以考慮多行讀寫的操作。
1、一次寫入多行
1
2
3
4
5
6
|
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" ) #將每個元素循環寫入文件,行末加\n t.close() print ( "連續寫入完成" ) |
效果:
2、一次讀一行
f.readline(s),f代表以可讀模式打開的文件;s為可選參數,若設置指定大小的字節,則返回相應大小的字符串,若沒有設定,則以行單位返回字符串。
1
2
3
4
5
|
t1 = open (r "g:/t2.txt" , "r" ) dd = 1 while dd: dd = t1.readline() #一次讀一行 print (dd.strip()) #strip()去除字符串兩端的空字符 |
效果:
3、以列表格式讀取多行
1
2
3
|
t1 = open (r "g:/t2.txt" , "r" ) t_s = t1.readlines() #以列表格式讀取多行 print (t_s) |
效果:
4、連續讀特定字節數量的內容
1
2
3
4
5
|
f = open (r "g:/t2.txt" , "r" ) print (f.readline( 2 )) #讀取文件頭2個字節 print (f.readline()) #繼續讀取同一行,剩余字節 print (f.read( 4 )) #繼續讀取4個字節 print (f.read( 4 )) |
效果:
5、在指定位置讀內容
5.1 f.tell(),f代表打開的文件,tell()方法返回當前文件可以寫入讀寫的位置(字節數)
1
2
3
4
5
6
7
8
|
f = open (r "g:/t2.txt" , "r" ) print (f.readline( 2 )) #讀取文件頭2個字節 print (f.readline()) #繼續讀取同一行,剩余字節 print (f.read( 4 )) #繼續讀取4個字節 print (f.read( 4 )) print (f.tell()) #獲取執行上述操作后的當前位置 print (f.read( 1 )) print (f.tell()) |
效果:
5.2 f.seek(offset[,whence])
f代表以打開的文件,seek()方法重新指定將要讀寫的當前位置。offset參數設置位置的偏移量的字節數,whence參數可選,確定文件起計位置,默認值為seek_set(或0),代表從文件大的開始位置+偏移量來確定當前位置;seek_set(或1),代表當前位置起計;seek_end(或2),代表從文件的結尾起計。
1
2
|
print (f.seek( 17 )) print (f.read( 4 )) |
效果:
在指定位置寫內容
1
2
3
4
|
f3 = open (r "g:/t2.txt" , "w" ) print (f3.seek( 17 )) f3.write( '---' ) f3.close() |
效果:
4. 文件異常處理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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 : #是否出錯,都強制執行下列代碼 if flag: #如果文件打開順利 f.close() #則關閉文件 print ( "文件做關閉處理!" ) else : #文件打開出現異常 print ( "程序關閉" ) |
效果:
5. 文件與路徑
5.1 與路徑相關的操作 獲取程序運行的當前路徑
os.path.abspath§,abspath()以字符串形式為返回平臺歸一化的絕對路徑,p為指定的路徑名稱(字符型),若p為指定”(.)“,則代表當前路徑。
1
2
|
import os print (os.path.abspath(os.path.curdir)) #返回當前絕對路徑 |
效果:
判斷指定路徑下是否存在文件
1
2
|
import os print (os.path.exists(r "g:\\t1.txt" )) #用exists()方法判斷文件是否已經存在 |
效果:
exists§方法判斷指定路徑下的文件是否存在。若存在,則返回true,若不存在,則返回false。p為指定的來路徑的文件字符串,也可以通過isfile()方法直接判斷。
判斷指定路徑是否存在
isdir§方法判斷指定路徑是否存在,p為字符串格式的路徑,存在返回true,不存在則返回false。
1
2
|
import os print (os.path.isdir(r "g:\\" )) #用isdir()方法判斷路徑是否存在 |
效果:
exists§方法也可以用來直接判斷路徑
1
2
|
import os print (os.path.exists(r "g:\\" )) #用exists()方法直接判斷路徑 |
效果:
建立文件夾(子路徑)
利用os模塊的makedirs§方法可以建立對應的文件夾,p為字符串形式的需要建立的路徑,建立不成功,拋出oserror出錯信息;建立成功,則在對應的路徑下將發現新建立的文件夾。
1
2
|
import os print (os.makedirs(r "g:\\files" )) #在g盤建立files文件夾 |
效果:
5.2 動態指定路徑下建立新文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import os import sys get_cur_path = os.path.abspath(os.path.curdir) f_n = get_cur_path + "\\files" #在當前路徑建立子路徑files try : if not os.path.isdir(f_n): #確認路徑是否存在 os.makedirs(f_n) #不存在,建立子路徑 except : #建立子路徑過程發生異常 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 ( "文件做關閉處理!" ) else : print ( "程序關閉" ) |
效果:
總結
到此這篇關于python文件處理筆記之文本文件的文章就介紹到這了,更多相關python處理文本文件內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/m0_55697123/article/details/119580003