Python全棧之文件函數(shù)和函數(shù)參數(shù)
更新時間:2021年12月01日 15:39:12 作者:熬夜泡枸杞
這篇文章主要為大家介紹了Python的文件函數(shù)和函數(shù)參數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
1. 文件相關(guān)函數(shù)
# ### 刷新緩沖區(qū)
"""
# 刷新緩沖區(qū) flush
# 當文件關(guān)閉的時候自動刷新緩沖區(qū)
# 當整個程序運行結(jié)束的時候自動刷新緩沖區(qū)
# 當緩沖區(qū)寫滿了 會自動刷新緩沖區(qū)
# 手動刷新緩沖區(qū)
"""
"""
fp = open("ceshi1.txt",mode="a",encoding="utf-8")
fp.write("abc")
# 手動刷新緩沖區(qū),直接把內(nèi)容寫入到文件
fp.flush()
while True:
pass
fp.close()
"""
# ### 文件相關(guān)的函數(shù)
"""fp這個對象本身是迭代器,可以把文件中的內(nèi)容按照換行一行一行遍歷出來"""
"""
fp = open("ceshi1.txt",mode="r",encoding="utf-8")
#readable() 功能: 判斷文件對象是否可讀
print(fp.readable())
#writable() 功能: 判斷文件對象是否可寫
print(fp.writable())
# 遍歷fp文件對象
for i in fp:
print(i)
"""
# 1.readline() 功能: 讀取一行文件內(nèi)容
'''
with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
res = fp.readline()
print(res)
res = fp.readline()
print(res)
res = fp.readline()
print(res)
res = fp.readline()
print(res)
# (1)一次把所有內(nèi)容都讀取出來
with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
# 先讀取一行
res = fp.readline()
# 判斷是不是空,不是空在循環(huán)
while res:
print(res)
# 在讀取一行,放到循環(huán)中判斷.
res = fp.readline()
# (2)注意點:readline(讀取的字符數(shù))
print("<====================>")
with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
"""
讀取的字符數(shù)量 > 實際當前行字符數(shù)量的時候 => 按照當前行讀取
讀取的字符數(shù)量 < 實際當前行字符數(shù)量的時候 => 按照實際數(shù)量來讀
"""
res = fp.readline(300)
print(res)
'''
print("<====================>")
# 2.readlines() 功能:將文件中的內(nèi)容按照換行讀取到列表當中
lst_new = []
with open("ceshi1.txt",mode="r+",encoding="utf-8") as fp:
lst = fp.readlines()
for i in lst:
lst_new.append(i.strip())
print(lst_new)
# 3.writelines() 功能:將內(nèi)容是字符串的可迭代性數(shù)據(jù)寫入文件中 參數(shù):內(nèi)容為字符串類型的可迭代數(shù)據(jù)
lst = ['床前明月光', '疑是地上霜', '舉頭望明月', '低頭想家鄉(xiāng)']
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
fp.writelines(lst)
# ### 實現(xiàn)效果:加入換行效果,并且插入一句話:王文真帥呀 , 插在低頭想家鄉(xiāng)的前面
lst_new = []
# 先把內(nèi)容插入到原列表中
lst.insert(-1,"王文真帥呀")
# 循環(huán)原列表,把每一個元素拼接\n , 放到新列表
for i in lst:
lst_new.append(i + "\n")
print(lst_new)
# 把新列表中的每行內(nèi)容插入到文件中
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
fp.writelines(lst_new)
# 注意點,內(nèi)容必須是字符串,不能是整型
"""
lst = [1,2,3]
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
fp.writelines(lst)
"""
# 4.truncate() 功能: 把要截取的字符串提取出來,然后清空內(nèi)容將提取的字符串重新寫入文件中 (字節(jié))
with open("ceshi2.txt",mode="r+",encoding="utf-8") as fp:
fp.truncate(3)
"""
seek(字節(jié))
truncate(字節(jié))
read(字符/字節(jié))
readline(字符/字節(jié))
"""
2. 函數(shù)_函數(shù)的參數(shù)
2.1 函數(shù)
# ### 函數(shù)
"""
概念:功能 (包裹一部分代碼 實現(xiàn)某一個功能 達成某一個目的)
特點:可以反復(fù)調(diào)用,提高代碼的復(fù)用性,提高開發(fā)效率,便于維護管理
"""
# 1.函數(shù)基本格式
"""
# 定義一個函數(shù)
def 函數(shù)名():
code1
code
# 調(diào)用函數(shù)
函數(shù)名()
"""
# 定義函數(shù)
def func():
print("我是一個函數(shù) ... ")
# 調(diào)用函數(shù)
func()
# 2.函數(shù)的命名
"""
字母數(shù)字下劃線,首字符不能為數(shù)字
嚴格區(qū)分大小寫,且不能使用關(guān)鍵字
函數(shù)命名有意義,且不能使用中文哦
駝峰命名法:
(1) 大駝峰命名法: 每個單詞的首字符要大寫 (類的命名)
mycar => MyCar
(2) 小駝峰命名法: 除了第一個單詞首字符小寫外,剩下單詞首字符大寫 (函數(shù)或者變量)
mycar => myCar
_命名法:可以將不同的單詞用_拼接在一起
mycar => my_car
symmetric_differencesymmetricDifference SymmetricDifference
"""
# 函數(shù)定義
def cfb_99():
for i in range(1,10):
for j in range(1,i+1):
print("{:d}*{:d}={:2d} ".format(i,j,i*j) ,end="")
print()
# 調(diào)用函數(shù)
for i in range(5):
cfb_99()
2.2 函數(shù)的參數(shù)
# ### 函數(shù)的參數(shù)
"""
參數(shù): 函數(shù)運算時需要的值
參數(shù)種類:
(1)形參: 形式參數(shù),在函數(shù)的定義處
(2)實參: 實際參數(shù),在函數(shù)的調(diào)用處
形參的種類:
1.普通形參(位置形參) 2.默認形參 3普通收集形參 4.命名關(guān)鍵字形參 5.關(guān)鍵字收集形參
實參的種類:
1.普通實參 2.關(guān)鍵字實參
原則:
形參和實參要一一的對應(yīng)
"""
# 1.普通形參(位置形參)
# 定義函數(shù)
"""hang,lie普通形參,在函數(shù)定義處"""
def small_star(hang,lie):
i = 0
while i < hang:
j = 0
while j < lie:
print("*",end="")
j +=1
print()
i += 1
# 調(diào)用函數(shù)
"""10,10普通實參,在函數(shù)的調(diào)用處"""
small_star(10,10)
small_star(2,3)
# 2.默認形參
"""hang,lie默認形參,在函數(shù)定義處"""
"""
如果給予實參,那么使用實參
如果沒有給予實參,那么使用參數(shù)身上的默認值
"""
def small_star(hang=10,lie=10):
i = 0
while i < hang:
j = 0
while j < lie:
print("*",end="")
j +=1
print()
i += 1
small_star(4,8)
small_star(8)
small_star()
# 3.普通形參 + 默認形參
"""普通形參必須寫在默認形參的前面不能調(diào)換位置"""
def small_star(hang,lie=10):
i = 0
while i < hang:
j = 0
while j < lie:
print("*",end="")
j +=1
print()
i += 1
small_star(5,7)
# small_star(5)
# small_star() error
# 4.關(guān)鍵字實參
print("<=============>")
"""
1.如果都是關(guān)鍵字實參,可以任意調(diào)整實參的順序
2.普通實參必須寫在關(guān)鍵字實參的前面
"""
def small_star(hang,a,b,c,lie=10):
i = 0
while i < hang:
j = 0
while j < lie:
print("*",end="")
j +=1
print()
i += 1
# hang a ... lie 具體指定參數(shù)的值叫做關(guān)鍵字實參,在函數(shù)的調(diào)用處;
# small_star(hang=3,a=4,b=5,c=6,lie=7)
# small_star(b=5,c=6,lie=7,a=4,hang=3)
small_star(3,4,b=5,c=6,lie=7)
small_star(3,4,b=5,lie=7,c=6)
# small_star(b=5,c=6,lie=7,3,4) error
3. 收集參數(shù)
# ### 收集參數(shù)
"""
(1) 普通收集形參: 專門用來收集那些多余的沒人要的普通實參
收集之后,會把多余實參打包成一個元組
參數(shù)頭上1個星星
def func(*args):
pass
args => arguments
"""
def func(a,b,c,*args):
print(a,b,c) # 1 2 3
print(args) # (4,5,6)
func(1,2,3,4,5,6)
# 任意個數(shù)值得累加和
def mysum(*args):
total = 0
for i in args:
total += i
print(total)
mysum(1,2,3,4,4,45,10,100)
"""
(2) 關(guān)鍵字收集形參:專門用來收集那些多余的沒人要的關(guān)鍵字實參
收集之后,會把多余關(guān)鍵字實參打包成一個字典
參數(shù)頭上有2個星星
def func(**kwargs):
pass
kwargs => keyword arguments
"""
def func(a,b,c,**kwargs):
print(a,b,c)
print(kwargs) # {'f': 100, 'e': 200, 'z': 12}
func(c=1,a=3,b=10,f=100,e=200,z=12)
# 拼接任意個數(shù)值變成字符串
"""
班長: 趙萬里
班花: 馬春陪
劃水群眾: 趙沈陽,李虎凌,劉子濤
"""
def func(**kwargs):
strvar1 = ""
strvar2 = ""
# 定義職位信息
dic = {"monitor":"班長","classflower":"班花"}
print(kwargs)
# 共5次循環(huán)
for k,v in kwargs.items():
if k in dic:
# 將2次循環(huán)的結(jié)果通過+= 拼接在一起
strvar1 += dic[k] + ":" + v + "\n"
else:
# 將3次循環(huán)的結(jié)果通過+= 拼接在一起
strvar2 += v + " , "
print(strvar1.strip())
print("劃水群眾:",strvar2.strip(" , "))
"""
# print(k,v)
k v
monitor 趙萬里
classflower 馬春陪
water1 趙沈陽
water2 李虎凌
water3 劉子濤
{'monitor': '趙萬里', 'classflower': '馬春陪', 'water1': '趙沈陽', 'water2': '李虎凌', 'water3': '劉子濤'}
"""
func(monitor="趙萬里",classflower="馬春陪",water1="趙沈陽",water2="李虎凌",water3="劉子濤")
4. 命名關(guān)鍵字_總結(jié)
# ### 命名關(guān)鍵字參數(shù)
"""
(1) def func(a,b,*,c,d) 跟在*號后面的c和d是命名關(guān)鍵字參數(shù)
(2) def func(*args,e,**kwargs) 加在*args和**kwargs之間的參數(shù)都是命名關(guān)鍵字參數(shù)
命名關(guān)鍵字參數(shù) : 在調(diào)用函數(shù)時,必須使用關(guān)鍵字實參的形式來進行調(diào)用;
"""
# 定義方法一
def func(a,b,*,c,d):
print(a,b)
print(c,d)
# 必須指定關(guān)鍵字實參,才能對命名關(guān)鍵字形參進行賦值
func(1,2,c=3,d=4)
# 定義方法二
def func(*args,e,**kwargs):
print(args) # (1, 2, 3, 4)
print(e) # 3
print(kwargs) # {'a': 1, 'b': 2}
func(1,2,3,4,a=1,b=2,e=3)
# ### 星號的使用
"""
* 和 ** 如果在函數(shù)的定義處使用:
* 把多余的普通實參打包成元組
** 把多余的關(guān)鍵字實參打包成字典
* 和 ** 如果在函數(shù)的調(diào)用處使用:
* 把元組或者列表進行解包
** 把字典進行解包
"""
def func(a,b,*,c,d):
print(a,b)
print(c,d)
tup = (1,2)
# 函數(shù)的調(diào)用處 *號用法
func(*tup,c=3,d=4) # func(1,2,c=3,d=4)
# 函數(shù)的調(diào)用處 **號用法
dic={"c":3,"d":4}
func(1,2,**dic) # func(1,2,c=3,d=4)
# 綜合寫法
# 函數(shù)的調(diào)用處
tup = (1,2)
dic={"c":3,"d":4}
func(*tup,**dic)
# 定義成如下形式,可以收集所有的實參
def func(*args,**kwargs):
pass
# 總結(jié): 當所有的形參都放在一起的時候,順序原則:
"""
普通形參 -> 默認形參 -> 普通收集形參 -> 命名關(guān)鍵字形參 -> 關(guān)鍵字收集形參
"""
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
# 以上兩個函數(shù) 打印結(jié)果
#(一)
f1(1, 2) # a =1 b=2 c=0 args=() kw={}
f1(1, 2, c=3) # a=1,b=2,c=3,args=() kw={}
f1(1, 2, 3, 'a', 'b') #a=1 b=2 c=3 args=(a,b) kw={}
f1(1, 2, 3, 'a', 'b', x=99) # a=1 b=2 c=3 args=(a,b) kw={x:99}
f2(1, 2, d=99, ext=None)#a=1 b=2 c=0 d=99 kw={ext:None}
#(二)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
# f1(1,2,3,4,d=99,x=#)
f1(*args, **kw) # a=1 b=2 c=3 args=(4,) kw={d:99,x:#}
#(三)
myargs = (1, 2, 3)
mykw = {'d': 88, 'x': '#'}
# f2(1,2,3,d=88,x=#)
f2(*myargs, **mykw) # a=1,b=2,c=3 d=88 kw={x:#}
#(四)
def f1(a, b, c=0, *args,d,**kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
print(d)
f1(1,2,3, 'a', 'b',d=67, x=99,y=77) # a=1 b=2 c=3 args=(a,b) kw={x:99,y:77}
# d=67
小提示:
出現(xiàn)網(wǎng)絡(luò)延遲堵塞的時候,自己用flush刷一下 strvar = alex Nb # 注意:這里雖然說把首字母大寫了,但是會把后面的大寫字母變成小寫 print(srvar.capitalize) #Alex nb
5. 小練習(xí)
練習(xí)問題:
#1.有如下文件,a1.txt,里面的內(nèi)容為:
鍵盤敲爛,
月薪過萬.
鍵盤落灰,
狗屎一堆.
分別完成以下的功能:
a:將原文件全部讀出來并打印。
b:在原文件后面追加一行內(nèi)容:信不信由你,反正我信了。
c:將原文件全部讀出來,并在后面添加一行內(nèi)容:信不信由你,反正我信了。
d:將原文件全部清空,換成下面的內(nèi)容:
每天堅持一點,
每天努力一點,
每天多思考一點,
慢慢你會發(fā)現(xiàn),
你的進步越來越大。
e:將原文件內(nèi)容全部讀取出來,
并在'鍵盤落灰'這一行的前面加一行,'年薪百萬'
然后將更改之后的新內(nèi)容,寫入到一個新文件:a1.txt。
#2.有如下文件,t1.txt,里面的內(nèi)容為:
葫蘆娃,葫蘆娃,
一根藤上七個瓜
風(fēng)吹雨打,都不怕,
啦啦啦啦。
上面的內(nèi)容你肯定是心里默唱出來的,對不對
分別完成下面的功能:
a:以r+的模式打開原文件,判斷原文件是否可讀,是否可寫。
b:以r的模式打開原文件,利用for循環(huán)遍歷文件對象。
c:以r的模式打開原文件,以readlines()方法讀取出來,并循環(huán)遍歷
d:以r模式讀取‘葫蘆娃,'前四個字符。
e:以r模式讀取第一行內(nèi)容,并去除此行前后的空格,制表符,換行符。
f:以r模式打開文件,從‘風(fēng)吹雨打.....'開始讀取,一直讀到最后。
g:以a+模式打開文件,先追加一行:‘老男孩教育'然后在全部讀取出來。
h:截取原文件,截取內(nèi)容:‘葫蘆娃,葫蘆娃,'
#3.文件a.txt內(nèi)容:每一行內(nèi)容分別為商品名字,價錢,個數(shù)。
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
變成如下數(shù)據(jù)格式,并計算出總價格
[
{'name':'apple','price':10,'amount':3},
{'name':'tesla','price':1000000,'amount':1}
]
#4.定義函數(shù):打印用戶傳入的容器類型數(shù)據(jù)長度
#5.定義函數(shù):參數(shù)為容器類型數(shù)據(jù),打印所有奇數(shù)位索引對應(yīng)的元素
#6.定義函數(shù):,接收一個參數(shù)(可迭代性數(shù)據(jù)),用_讓元素相連成字符串,打印出來
#7.輸入字符串 "k:1|k1:2|k2:3|k3:4" 處理成字典 {'k':1,'k1':2....} 打印出來
#8.輸入列表li= [11,22,33,44,55,66,77,88,99,90]
# 將大于 66 的值保存至字典的k1鍵中,
# 將小于 66 的值保存至字典的k2鍵中。
# 打印字典 {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
練習(xí)答案:
# a
with open("a1.txt",mode="r",encoding="utf-8") as fp:
print(fp.read())
# b
with open("a1.txt",mode="a+",encoding="utf-8") as fp:
fp.write("\n\t信不信由你,反正我信了")
# c
with open("a1.txt",mode="a+",encoding="utf-8") as fp:
print(fp.read())
fp.write("\n\t信不信由你,反正我信了")
# d
strvar ="""
每天堅持一點,
每天努力一點,
每天多思考一點,
慢慢你會發(fā)現(xiàn),
你的進步越來越大。
"""
with open("a1.txt",mode="w+",encoding="utf-8") as fp:
fp.write(strvar)
# e
with open("a2.txt",mode="r+",encoding="utf-8") as fp:
lst = fp.readlines()
print(lst) # ['\t鍵盤敲爛,\n', '\t月薪過萬.\n', '\t鍵盤落灰,\n', '\t狗屎一堆.\n']
lst.insert(-2,"\t年薪百萬\n")
with open("a3.txt",mode="w+",encoding="utf-8") as fp:
fp.writelines(lst)
# #####################################
# a
with open("a4.txt",mode="r+",encoding="utf-8") as fp:
print(fp.readable())
print(fp.writable())
# b
with open("a4.txt",mode="r",encoding="utf-8") as fp:
for i in fp:
print(i)
# c
with open("a4.txt",mode="r",encoding="utf-8") as fp:
lst = fp.readlines()
for i in lst:
print(i)
# d
with open("a4.txt",mode="r",encoding="utf-8") as fp:
print(fp.read(4))
# e
with open("a4.txt",mode="r",encoding="utf-8") as fp:
print(fp.readline().strip())
# f
print("<====>")
with open("a4.txt",mode="r",encoding="utf-8") as fp:
lst = fp.readlines()
for i in lst[-2:]:
print(i)
# g
with open("a4.txt",mode="a+",encoding="utf-8") as fp:
fp.write("\n老男孩教育")
fp.seek(0)
print(fp.read())
# h
with open("a4.txt",mode="r+",encoding="utf-8") as fp:
fp.truncate(24)
# #####################################
"""
[
'\tapple 10 3\n',
'\ttesla 100000 1\n',
'\tmac 3000 2\n',
'\tlenovo 30000 3\n',
'\tchicken 10 3'
]
"""
print("><======================?")
lst_new = []
total = 0
with open("a5.txt",mode="r+",encoding="utf-8") as fp:
lst = fp.readlines()
# print(lst)
for i in lst:
# 定義空字典
dic = {}
# 取出字符串兩邊的空白
lst = i.strip().split()
print(lst)
# 拼裝字典
dic["name"] = lst[0]
dic["price"] = int(lst[1])
dic["amount"] = int(lst[2])
# 累計當前商品的價格總數(shù)
res = dic["price"] * dic["amount"]
# 累計所有的商品價格總數(shù)
total += res
# 把當前商品的信息字典追加到列表中
lst_new.append(dic)
print(total)
print(lst_new)
"""
[
{'name': 'apple', 'price': 10, 'amount': 3},
{'name': 'tesla', 'price': 100000, 'amount': 1},
{'name': 'mac', 'price': 3000, 'amount': 2},
{'name': 'lenovo', 'price': 30000, 'amount': 3},
{'name': 'chicken', 'price': 10, 'amount': 3}
]
"""
# 4.
def func(container):
return len(container)
res = func((1,2,3,4))
print(res)
# 5.
def func(container):
# 方法一
# for i in range(1,len(container),2):
# print(container[i])
# 方法二
for i in container[1::2]:
print(i)
func([11,22,33,44,55,666])
# 6.
def func(container):
"""
# 方法一
strvar = ""
for i in container:
strvar += str(i) + "_"
return strvar.rstrip("_")
"""
# 方法二
lst_new = []
for i in container:
lst_new.append(str(i))
return "_".join(lst_new)
container = [1,2,3,4,5]
res = func(container)
print(res)
# 7
strvar = "k:1|k1:2|k2:3|k3:4"
def func(strvar):
'''
# 方法一
lst = strvar.split("|")
print(lst) # ['k:1', 'k1:2', 'k2:3', 'k3:4']
dic = {}
for i in lst:
k,v = i.split(":")
dic[k] = v
"""
['k', '1']
['k1', '2']
['k2', '3']
['k3', '4']
"""
return dic
'''
# 方法二
lst = strvar.split("|")
lst_new = []
for i in lst:
lst_new.append(i.split(":"))
return dict(lst_new)
print(func(strvar))
# 8
li= [11,22,33,44,55,66,77,88,99,90]
lst1 = []
lst2 = []
dic = {"k1":None,"k2":None}
def func(li):
for i in li:
if i > 66:
lst1.append(i)
elif i < 66:
lst2.append(i)
dic["k1"] = lst1
dic["k2"] = lst2
return dic
res = func(li)
print(res)
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python使用suds調(diào)用webservice接口的方法
今天小編就為大家分享一篇python使用suds調(diào)用webservice接口的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python實現(xiàn)生命游戲的示例代碼(Game of Life)
這篇文章主要介紹了python實現(xiàn)生命游戲的示例代碼(Game of Life),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01

