python基礎-檔案操作
阿新 • • 發佈:2018-11-14
#######python基礎-檔案操作######## # 1、請問什麼檔案? 檔案其實就是一個虛擬的單位,為什麼這麼說?是什麼時候才有了檔案的概念(我說計算機哈),是有了作業系統之後, 作業系統把硬碟上的資料,整理成一個一個檔案,便於使用者方便操作。是不是沒有作業系統,你想怎麼去操作檔案呢? 哈哈,你手動去計算機硬碟自己去刻讀,但是你知道你想操作的資料在哪裡嘛?不知道對吧。 # 2、比如pycharm直譯器吧,它想操作一個檔案的讀寫,請問它能自己去操作嘛? 答案是不能,一個應用軟體可以直接操作計算機硬體?那請問它是怎麼才能操作硬碟上的資料。這麼說吧,操作計算機硬體 的只有作業系統才可以,所以一個應用軟體想要操作硬碟上的資料,必須通過作業系統才行,然後讓作業系統去幫你讀寫資料。 在python中,怎麼去操作硬碟上的檔案呢?(其實是讓作業系統幫你操作) open這個方法 f= open('a.txt',mode='rt') # 開啟a.txt檔案,只讀t模式 # 上面那個程式碼請問執行了哪些操作? # 首先執行open函式對吧,執行這個函式,就是讓python直譯器向作業系統發出一個請求,說幫我開啟a.txt這個檔案 # 此時作業系統的記憶體中是不是有一份對a.txt檔案操作的記憶體。 # 執行完open函式,它有一個差不多檔案物件的返回值,賦值給了f,這是不是變數的賦值操作。 # 那麼就會python直譯器的記憶體中,開闢一個名稱空間,將f扔進去,f後面對應的是函式返回值的記憶體地址對吧。 ### 總結:是不是在python直譯器內有一份對a.txt檔案操作的記憶體,在作業系統中是不是也有。執行f.read() # 上面說了f就是一個物件,它下面就會有一些列的方法對吧 # f.read()執行這句程式碼,又做了些什麼操作,想一想? # python直譯器向作業系統發出一個讀的指令,作業系統就去硬碟中讀取到作業系統的記憶體中 # 再由作業系統讀取到python直譯器記憶體中。 # 注意一下,這個f是不是沒有執行解碼格式,那麼作業系統就會以預設的字元編碼去解碼(gbk),如果你的檔案是以gbk的話,也可以不用指定 # 但是最好還是指定一下,避免出錯。encoding='utf-8' # f.close() #這句程式碼是向作業系統發出可以關閉檔案的請求,操作就會關閉對a.txt的編輯操作。 # 注意:很多人都是忘記寫f.close(),就算不寫我程式也不錯報錯,幹嘛不寫啊。 # 對,你程式是不會出錯,你py檔案執行完畢之後,python直譯器就是自動釋放記憶體,垃圾回收機制嘛, # 但是你在作業系統裡的這份資源誰去回收(作業系統可能過一段時間會清理),最好你用完了對該檔案的操作, # 習慣性的把作業系統的資源也即是釋放。 上面說了一大堆,就是讓你每次open一個檔案,記得寫close。 # 思考? f = open('a.txt','rt',encoding='utf-8') data = f.read() f.close() print(f) print(f.read()) # 請問上面程式碼執行結果,為什麼 下面寫下對檔案的操作,無非就是讀寫吧。 f = open('a.txt',encoding='utf-8') # 上面沒寫對檔案的操作和對檔案內容格式操作,預設為讀(r),文字模式(t),文字模式就是字串格式嘛 f = open('a.txt','w',encoding='utf-8') # 上面沒寫對檔案內容格式操作,那預設就是文字模式唄(t) 對檔案操作: # r 只讀模式 # w 只寫模式 # a 只追加模式 對檔案內容格式操作 # t 文字模式(str) # b 二進位制模式(bytes) 只讀模式,下面的方法: f = open('a.txt','rt',encoding='utf-8') f.readline() #只讀一行 f.read() #讀全部內容 f.readlines() #也是讀全部內容,但是他的返回值一個列表,列表裡的元素是每一行內容 f.readable() #是否可讀 f.writable() #是否可寫 只寫模式,下面的方法: f = open('a.txt','wt',encoding='utf-8') f.write() #寫內容 f.writelines() #也是寫,但是引數是一個可迭代的,就和上面readable一樣,每個元素最為一行 f.readable() #是否可讀 f.writable() #是否可寫 只追加模式: f = open('a.txt','at',encoding='utf-8') f.write() #追加,就是在檔案最後開始寫 對檔案內容格式操作: t,b模式就不再多說了,讀出來的是二進位制,或者字串,寫進去的是二進位制或字串 # 注意:資料在硬碟儲存的是二進位制,所以你在使用b模式的時候,就不要寫encoding引數了 # 還有就是t,b模式不能單獨使用,必須配合a,w,r 忘了with這個方法 with open('a.txt','rb') as f: pass with的功能就是你在它的程式碼塊裡寫程式碼,寫完了之後,就不需要執行f.close(),他會自動幫你執行 對了,你可以多開啟幾個檔案,用逗號區分,比如 with open('a.txt','rb') as f,open('b.txt',''rb) as f2: pass