python學習之操作檔案物件操作
阿新 • • 發佈:2019-01-03
- 建立檔案物件:內建函式open()
利用內建函式open()建立檔案物件(開啟檔案後記得close(),防止斷電異常等造成資料丟失)
完整的語法格式為:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
常用引數file指定檔案位置(檔案分隔符需要轉義),mode:指定檔案開啟的模式,預設mode='t'(文字模式)
示例:
#開啟檔案,建立檔案物件 f = open('D:\\Python\\file\\text1.txt') print(f) #列印<_io.TextIOWrapper name='D:\\Python\\file\\text1.txt' mode='r' encoding='cp936'>
#檔案中的具體內容
'''
練習python檔案開啟
檔案開啟
檔案
'''
- 讀取檔案f.read([size])
引數size可不指定:預設讀取所有,當size指定為負值時效果與未指定時一樣讀取所有內容,指定size值則從檔案指標位置處讀取指定數量的字元數(注意是字元數不是位元組數)
例項:
print(f.read()) #列印所有內容 ''' 練習python檔案開啟 檔案開啟 檔案 ''' #將檔案指標定位到檔案開頭 f.seek(0,0) #讀取前10個字元 print(f.read(10)) #'練習python檔案' #讀取檔案指標之後所有內容,從第11個字元開始到最後 print(f.read(-1)) #內容 ''' 開啟 檔案開啟 檔案 '''
- 讀取檔案f.readline()
#檔案指標重新定位到開始位置
f.seek(0)
#從檔案指標位置讀取一行,一行的截止位置標識:\n
#按行讀取
print("====f.readline()====")
print(f.readline())
print(f.readline())
print(f.readline())
結果:
- 讀取檔案f.readlines()
讀取所有行存到list中,每行為list中的一個元素
#讀取所有行 #print(f.readlines()) #['練習python檔案開啟\n', '檔案開啟\n', '檔案\n', '\n'] allLines = f.readlines() #遍歷 for eachLine in allLines: print(eachLine)
結果:
注:python的檔案物件提供更簡單的遍歷檔案方式
#直接遍歷檔案物件中內容
for eachLine in f:
print(eachLine )
- 移動檔案指標位置f.seek(offset,from):當前指標所在位置(位元組數值)
引數offset:要偏移的位元組數,from:檔案指標開始偏移的位置,from=0:從檔案開始位置,from=1:從檔案指標當前位置,from=2:從檔案末尾
注:預設開啟檔案的方式為文字模式,這種模式下呼叫seek()方法時如果from引數不是0,會報錯:io.UnsupportedOperation: can't do nonzero cur-relative seeks(文字模式開啟只允許從檔案開頭為相對位置),此時需要修改檔案開啟的方式
#檔案開啟模式rb
f = open('D:\\Python\\file\\text1.txt','rb')
#檔案指標重新定位到檔案開始位置
f.seek(0,0)
f.seek(4,0) #從開頭位置偏移4個位元組(兩個漢字)
#列印偏移後的當前行內容
#print(f.readline()) #'python檔案開啟'
#從檔案指標當前位置偏移2個位元組
print(f.seek(2,1)) #值為6
#讀取6個字元
print(f.read(6)) #"b'thon\xce\xc4'",包括四個字母1個漢字
#從檔案末尾開始讀取
print(f.tell()) #當前檔案指標所在位置:12
print(f.seek(10,2)) #該檔案內容結尾檔案指標為38,w檔案末尾後再偏移10個位元組,列印:48
- f.tell():檢視當前檔案指標位置,如上程式碼
- f.close():關閉開啟的檔案
- f.write(str):寫入字串,檔案末尾追加
#open('檔案路徑','開啟方式'),如果要寫入內容需寫入許可權,檔案開啟方式至少包含w/+等
f =open('D:\\Python\\file\\text1.txt',"r+")#轉義磁碟\
print(f) #<_io.TextIOWrapper name='D:\\Python\\file\\text1.txt' mode='r' encoding='cp936'>
#f.write(str)檔案末尾追加字串
str2019 = '2019年'
print(f.write(str2019)) #返回的是字串的字元數長度:5
print(list(f))
f.close()