摘要:文件的基本操作編碼不同編碼之間的二進制是不能互相識別的。返回值有幾種情況分別是沒有返回值返回一個值返回多個值。函數定義計算的長度函數調用因為沒有返回值,此時的為只寫,后面不寫其他內容,也會返回,但是遇到會終止整個函數。
文件的基本操作 編碼
1.不同編碼之間的二進制是不能互相識別的。
2.對于文件的存儲,及傳輸 不能是unicode的編碼。
bytes:內部編碼格式(非unicode) str:內部編碼格式(unicode)文件的基本操作流程
計算機系統分為:計算機硬件,操作系統,應用程序三部分。
我們用python或其他語言編寫的應用程序若想要把數據永久保存下來,必須要保存于硬盤中,這就涉及到應用程序要操作硬件,眾所周知,應用程序是無法直接操作硬件的,這就用到了操作系統。操作系統把復雜的硬件操作封裝成簡單的接口給用戶/應用程序使用,其中文件就是操作系統提供給應用程序來操作硬盤虛擬概念,用戶或應用程序通過操作文件,可以將自己的數據永久保存下來。
有了文件的概念,我們無需再去考慮操作硬盤的細節,只需要關注操作文件的流程:
#1. 打開文件,得到文件句柄并賦值給一個變量 f=open("a.txt","r",encoding="utf-8") #默認打開模式就為r #2. 通過句柄對文件進行操作 data=f.read() #3. 關閉文件 f.close()
打開一個文件包含兩部分資源:操作系統級打開的文件+應用程序的變量。在操作完畢一個文件時,必須把與該文件的這兩部分資源一個不落地回收,回收方法為:
f.close() #回收操作系統級打開的文件文件編碼
f=open(...)是由操作系統打開文件,那么如果我們沒有為open指定編碼,那么打開文件的默認編碼很明顯是操作系統說了算了,操作系統會用自己的默認編碼去打開文件,在windows下是gbk,在linux下是utf-8。
#這就用到了上節課講的字符編碼的知識:若要保證不亂碼,文件以什么方式存的,就要以什么方式打開 f=open("a.txt","r",encoding="utf-8")文件的打開方式
文件句柄 = open(‘文件路徑’,‘模式’)
#1. 打開文件的模式有(默認為文本模式): r ,只讀模式[默認模式,文件必須存在,不存在則拋出異常] w,只寫模式[不可讀;不存在則創建;存在則清空內容] a, 只追加寫模式[不可讀;不存在則創建;存在則只追加內容] #2. 對于非文本文件,我們只能使用b模式,"b"表示以字節的方式操作(而所有文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式) rb wb ab 注:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼 #3,‘+’模式(就是增加了一個功能) r+, 讀寫[可讀,可寫] w+,寫讀[可寫,可讀] a+, 寫讀[可寫,可讀] #4,以bytes類型操作的讀寫,寫讀,寫讀模式 r+b, 讀寫[可讀,可寫] w+b,寫讀[可寫,可讀] a+b, 寫讀[可寫,可讀]文件的操作方法
read(3):
1. 文件打開方式為文本模式時,代表讀取3個字符
2. 文件打開方式為b模式時,代表讀取3個字節
其余的文件內光標移動都是以字節為單位的如:seek,tell,truncate 注意:
1. seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes為單位移動的
2. truncate是截斷文件,所以文件的打開方式必須可寫,但是不能用w或w+等方式打開,因為那樣直接清空文件了,所以truncate要在r+或a或a+等模式下測試效果。
其他方法:
def readable(self, *args, **kwargs): # real signature unknown 是否可讀 pass def readline(self, *args, **kwargs): # real signature unknown 僅讀取一行數據 pass def seek(self, *args, **kwargs): # real signature unknown 指定文件中指針位置 pass def flush(self, *args, **kwargs): # real signature unknown 刷新文件內部緩沖區 pass
for循環:循環文件句柄,可以保證內存中每次只有一行
with open("userinfo",encoding="utf-8",mode="r") as f: for line in f:文件的修改
文件的數據是存放于硬盤上的,因而只存在覆蓋、不存在修改這么一說,我們平時看到的修改文件,都是模擬出來的效果,具體的說有兩種實現方式:
方式一:將硬盤存放的該文件的內容全部加載到內存,在內存中是可以修改的,修改完畢后,再由內存覆蓋到硬盤(word,vim,nodpad++等編輯器)
全部讀入內存,如果文件很大,會很卡
import os # 調用系統模塊 with open("a.txt") as read_f,open(".a.txt.swap","w") as write_f: data=read_f.read() #全部讀入內存,如果文件很大,會很卡 data=data.replace("alex","SB") #在內存中完成修改 write_f.write(data) #一次性寫入新文件 os.remove("a.txt") #刪除原文件 os.rename(".a.txt.swap","a.txt") #將新建的文件重命名為原文件
循環文件句柄,可以保證內存中每次只有一行
import os with open("a.txt") as read_f,open(".a.txt.swap","w") as write_f: for line in read_f: line=line.replace("alex","SB") write_f.write(line) os.remove("a.txt") os.rename(".a.txt.swap","a.txt")初識函數
函數的定義:
函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。
函數能提高應用的模塊性,和代碼的重復利用率。你已經知道Python提供了許多內建函數,比如print(),len()等。但你也可以自己創建函數,這被叫做用戶自定義函數。
第一個函數:
#函數定義 def mylen(): """計算s1的長度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) #函數調用 mylen()
格式:
定義:def 關鍵詞開頭,空格之后接函數名稱和圓括號(),最后還有一個":"。 def 是固定的,不能變,他就是定義函數的關鍵字。 空格 為了將def關鍵字和函數名分開,必須空(四聲),當然你可以空2格、3格或者你想空多少都行,但正常人還是空1格。 函數名:函數名只能包含字符串、下劃線和數字且不能以數字開頭。雖然函數名可以隨便起,但我們給函數起名字還是要盡量簡短,并能表達函數功能 括號:是必須加的,先別問為啥要有括號,總之加上括號就對了! 注釋:每一個函數都應該對功能和參數進行相應的說明,應該寫在函數下面第一行。以增強代碼的可讀性。 調用:就是 函數名() 要記得加上括號函數的返回值return
咱們用len()方法時,得到的結果會賦值給一個變量,然后得到結果:
str_len = len("hello,world") print(str_len)
但是咱們寫的這個函數,并不會得到這樣的結果,如何讓他和len函數一樣,有返回值呢?
那就是在函數的最后加上一個return,return 后面寫你需要的返回值就可以了。
#函數定義 def mylen(): """計算s1的長度""" s1 = "hello world" length = 0 for i in s1: length = length+1 return length #函數調用 str_len = mylen() print("str_len : %s"%str_len)
return關鍵字的作用:
1.return 是一個關鍵字。
2.返回值有幾種情況:分別是沒有返回值、返回一個值、返回多個值。
沒有返回值None
不寫return的情況下,會默認返回一個None。
#函數定義 def mylen(): """計算s1的長度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) #函數調用 str_len = mylen() #因為沒有返回值,此時的str_len為None print("str_len : %s"%str_len)
只寫return,后面不寫其他內容,也會返回None,但是遇到return會終止整個函數。
def ret_demo(): print(111) return #只寫return print(222) ret = ret_demo() print(ret)
返回一個值,只需要在return寫上內容
#函數定義 def mylen(): """計算s1的長度""" s1 = "hello world" length = 0 for i in s1: length = length+1 return length #函數調用 str_len = mylen() print("str_len : %s"%str_len)
返回多個值,可以是任意多個數據類型的值。返回的多個值會被組織成元組被返回,也可以用多個值來接收。
def ret_demo1(): """返回多個值""" return 1,2,3,4 def ret_demo2(): """返回多個任意類型的值""" return 1,["a","b"],3,4 #返回多個值 ret1 = ret_demo1() print(ret1) ret2 = ret_demo2() print(ret2)函數的參數
實參和形參
實參,*在執行的時候代表打散
1.位置參數,按照順序一一對應
2.關鍵字參數,不用按照順序,一一對應
3.混合參數(包括關鍵字參數,和位置參數),關鍵字參數的位置必須在位置參數的后邊,一一對應
形參
1.位置參數,按照順序
2.默認參數,默認參數必須在位置參數的后邊
3.動態參數,又叫萬能參數,*在函數定義的時候聚合
*args:接收的所有位置參數,放到一個元組里 **kwargs:接收的所有關鍵字參數,放到一個字典里
形參的順序:位置參數--->args--->默認參數---->*kargs
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41753.html
摘要:上一篇文章實戰安裝下一篇文章實戰第一章初識第二節數據結構簡介是一個遠程內存數據庫,它不僅性能強勁,而且還具有復制特性以及為解決問題而生的獨一無二的數據模型,是一個速度非常快的非關系數據庫。 上一篇文章:Pyhton--Redis實戰:Mac brew安裝redis下一篇文章:Python--Redis實戰:第一章:初識Redis:第二節:Redis數據結構簡介 Redis是一個遠程內...
摘要:并于年月在許可證下發布??刂破魇菍⒛P秃鸵晥D隔離,并成為二者之間的聯系紐帶。該層處理與表現相關的決定如何在頁面或其他類型文檔中進行顯示。會話用戶登錄與權限檢查,快速開發用戶會話功能。 1.介紹Django 1.1 Django的來源 Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MVC的框架模式,即模型M,視圖V和控制器C。它最初是被開發來用于管理勞倫斯出版集...
摘要:上面需要了解的是這倆個版本都是破蛹成蝶的版本世界挑戰榜咋才前三還沒擠進去呀,你想想世界上有幾千中編程語言,在其中脫穎出來,可以說是天之嬌子,鳳毛麟角了。支持正版圖靈上面買吧,如果沒錢買盜版吧學完以后買本正版支持一下,創作不易是吧 ...
閱讀 2105·2021-11-24 09:39
閱讀 1494·2019-08-30 15:44
閱讀 1946·2019-08-29 17:06
閱讀 3392·2019-08-29 16:32
閱讀 3543·2019-08-29 16:26
閱讀 2654·2019-08-29 15:35
閱讀 3025·2019-08-29 12:50
閱讀 1635·2019-08-29 11:15