標籤:必須 預設 遍曆 取值 aaaaa 開始 for 對象 ##
#檔案操作的其他方法
##############################################################################
#檔案的內建操作函數
# 1.closed 查看檔案是否是關閉的狀態,輸出為布爾值,關閉的為True,未關閉的為False
# 2.encoding表示編碼的形式,函數方法開啟的編碼形式
# print(f.encoding)
# cp936
#************************************************************************
#不知道檔案編碼是什麼形式的情況下,還是要寫檔案或讀檔案的資訊,處理辦法:
#用拉丁文的方式開啟檔案latin-1
# f = open(‘test‘,‘r+‘,encoding=‘latin-1‘)#儘可能多的保留資料
# data = f.read()
# print(data)
# f.write(‘aaaaaaaa‘)
#檔案的編碼擷取的是系統的預設編碼
# f = open(‘test‘,‘r+‘,encoding=‘UTF-8‘)
# f.flush()#重新整理,使用這個命令就會儲存檔案
# f.isatty()#終端裝置
# print(f.tell())
# f.readline()
# f.readline()
# print(f.tell())#游標的當前位置
#newline=‘‘就是不要python內建的屏蔽參數
#檔案內游標的移動:除了read()代表讀取3個字元,其餘的檔案內游標的移動都是以位元組為單位,如seek、tell、read
# f.seek(3)
# print(f.read())
# 456
# 789
# opqsdasdnagaaaaaaaaaaaaaaaa
# print(f.read(5))
# 123
# 4
# f.truncate(10)#檔案截斷,屬於檔案的切割寫操作
# print(f.truncate(10))
#####################################################################
# f = open(‘test‘,‘rb‘)
# print(f.tell())
# f.seek(10)
# print(f.tell())
# f.seek(3)
# print(f.tell())
#seek的移動游標預設是從0的位置開始移動
#############################################################
#seek的幾種用法
#1.必須為‘rb‘模式才可以使用
#參數1為接指定上一次游標後的位置
#參數2為倒序,從結尾開始的游標,前面的順序必須為負數的形式
# print(f.tell())
# f.seek(-1,2)
# print(f.tell())
# f.seek(3,1)
# print(f.tell())
#################################################################################################################
#高端玩法:開啟大檔案的最後一行
# f = open(‘test‘,‘rb‘)
# for i in f:
# offs = -5#位移量需要自己估計,最後一行大約有多少個位元組
# while True:#做一個死迴圈
# f.seek(offs,2)
# rows = f.readlines()#從當前游標位置開始讀取一行的所有內容
# if len(rows) > 1:#如果檔案讀取的行數超過1行,則列印最後一行
# print(‘檔案的最後一行是%s‘%(rows[-1].decode(‘UTF-8‘)))
# break
# offs*=2
# 檔案的最後一行是+---------------------------------------------------------------------------+
#***************************************************************************************************************#
# 什麼是遞迴?
# 函數自己調用自己的方法就是遞迴
# 什麼是迭代?
# 可以被for迴圈遍曆的,每次迴圈得到的結果都是上一次的結果得出的
# 什麼是迭代器協議?
# 1.迭代器協議是指:對象必須提供一個next方法,執行該方法要麼返回迭代中的下一項,要麼就引起一個Stoplteration異常,
# 以終止迭代(只能往後不能往前退)
# 2.可迭代對象:實現了迭代器協議的對象(如何?:對象內部定義一個_iter_()方法)
# 3.協議是一種約定,可迭代對象實現了迭代器協議,python的內部工具(如for迴圈、sum、min、max函數等)使用迭代器協議訪問對象
# l = [1,2,3,4]
# for i in l:
# print(i)
######################Python的for迴圈機制##########################################################
# for迴圈的本質:迴圈所有的對象,全都是使用迭代器協議
#(字串、列表、元祖、字典、集合、檔案對象)這些都不是可迭代對象,只不過在for迴圈式,調用了內部的_iter_方法,變成了可迭代對象
# 然後for迴圈調用可迭代對象的_next_方法去取值,而且for迴圈會捕捉Stoplteration異常,以終止迭代
# l = [1,2,3,4]
# for i in l: #1.先執行_iter_(),再執行next方法
# print(i) #捕捉了異常,不再迭代
# l = [1,2,3,4]
# iter = l.__iter__()#遵循迭代器協議,產生可迭代對象
# print(iter.__next__())
# print(iter.__next__())
# print(iter.__next__())
# print(iter.__next__())
# l = [1,2,3,4]
# index = 0
# while index<len(l):
# print(l[index])
# index+=1
# 1
# 2
# 3
# 4
python檔案操作