1. 程式人生 > >python學習之操作檔案物件操作

python學習之操作檔案物件操作

  • 建立檔案物件:內建函式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()