python文件操作及函數學習
文件操作
文件讀
f = open(‘a.txt‘, encoding=‘utf-8‘, mode=‘r‘) #只讀方式打開文件
data = f.read() #read函數讀取所有文件內容,光標移動到末尾
data2 = f.read() #這次都不到內容,因為光標在文件末尾
f.seek(0) #seek函數使光標移動到文件開始位置
data3 = f.read() #讀到文件所有內容,因為光標移動到開始位置
f.close() #close關閉文件
f.closed #判斷文件是否關閉,關閉返回True,否則返回False
f.encoding #打印編碼格式
f.readable() #判斷文件是否已r模式打開,是則返回True,否則返回False
f.readline() #一次讀取一行
f.readlines() #讀取所有行,按照行存成列表
文件寫
f = open(‘a.txt‘, ‘w‘, encoding=‘utf-8‘) #沒有則創建,有則清空
print(f.writable()) #writable我文件是否可寫,可寫返回True, 否則返回False
f.write(‘11111111\n222‘) #write寫文件
f.wirtelines([‘\n5555\n‘, ‘6666666666\n‘, ‘777777\n‘]) #寫入多行文件
文件修改
read_f = open(‘b.txt‘, ‘r‘)
write_f = open(‘.b.txt.swap‘, ‘w‘)
for line in read_f.readlines():
if line.startswith(‘1111‘):
line = ‘2222222\n‘
write_f.write(line)
read_f.close()
write_f.close()
os.remove(‘b.txt‘) #用到os模塊,remove函數刪除文件
os.rename(‘.b.txt.swap‘, ‘b.txt‘) #rename重命名文件
f = open(‘a.txt‘, ‘r+‘) #讀寫模式打開文件
f = open(‘a.txt‘, ‘w+‘) #寫讀模式打開文件
f = open(‘a.txt‘, ‘a+‘) #追加並且可讀
為了避免忘記用close關閉文件,可以使用以下方法來操作文件
with open(‘a.txt‘,‘r‘, encoding=‘utf-8‘):
print(f.read())
補充知識:for循環可以使用帶else語句,for循環結束沒被打斷,會進入else,否則不執行else
for i in range(1,11):
if i == 1:
break
print(i)
else:
print("打印完畢")
i = 0
while i < 5:
print(i)
i += 1
if i == 3:
break
else:
print("打印完畢")
with open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘) as f: #從文件讀到的內容是字符
f.seek(3) #數字3代表光標移動3個字節,默認是文件起始位置
f.seek(2,1) #1代表光標從當前位置移動2個字節
seek()的三種模式:
(1)f.seek(p,0) 移動當文件第p個字節處,絕對位置
(2)f.seek(p,1) 移動到相對於當前位置之後的p個字節
(3)f.seek(p,2) 移動到相對文章尾之後的p個字節
print(f.tell()) #打印光標所在的位置
print(f.read())
python實現tail -f 功能
with open(‘access.log‘, ‘r‘) as f:
f.seek(0,2)
while True:
line = f.readline()
if line:
print("新增一行:" + line)
2. 函數
函數實現代碼冗余,可讀性強,有效統一管理維護成本低.
語法:
def 函數名(參數1,參數2,...):
"""文檔註釋"""
函數體
return value
自定義函數,必須先定義後引用,否則相當於應用一個沒有定義的變量
無參函數
def print_star():
print(‘*‘ * 6)
print_star()
有參函數
def my_max(x,y):
if x > y:
return x
else:
return y
print(my_max(1,2))
三元表達式
res = x if x > y else y
空函數
def insert()
"""功能"""
pass
函數分為形參和實參
定義階段
def foo(x, y):
print(x,y)
調用階段
foo(1,2)
函數的參數分為5種:位置參數,關鍵字參數,默認參數,可變長參數(*args, **kwargs),命名關鍵字參數
位置參數:
def foo(x,y,z): #必須被傳值的參數
print(x,y,z)
關鍵字參數: key=value
def foo(x,y,z):
print(x,y,z)
foo(z=3,y=2,x=1)
關鍵字實參必須在位置實參後面,不能重復給一個形參傳值
默認參數
def register(name, age, sex=‘male‘):
print(name, age, sex)
register(alex, 18)
register(alex, 19, ‘female‘)
register(alex, 20, sex=‘male‘)
默認參數必須跟在非默認參數後面,默認參數只在定義時賦值一次,默認參數的值通常定義成不可變類型
可變長參數
def foo(x, y , *args): #會把溢出的按位置定義的實參都接收,以元組的形式賦值給args
print(x, y)
print(args)
foo(1,2,3,4,5)
def foo(x, y, **kwargs): #會把溢出的按位置定義的實參都接收,以字典的形式賦值給kwargs
print(x, y)
print(kwargs)
foo(1, 2, a=3, c=4, b=5)
命名關鍵字參數
def foo(name,age=10,*args,sex=‘male‘,height,**kwargs):
print(name)
print(age)
print(args)
print(sex)
print(height)
print(kwargs)
foo(‘alex‘,1,2,3,4,5,sex=‘female‘,height=‘150‘,a=1,b=2,c=3)
以下方式等價
foo(*[1,2,3,4]) <==> foo(1,2,3,4)
foo(**{a:1, b:2}) <==>foo(a=1,b=2)
def wrapper(*args, **kwargs):
print(args)
print(kwargs)
wrapper(1,2,3,4, a=5, b=6)
函數返回值有三種方式
沒有return關鍵字,返回None
有關鍵字return 返回一個值
有關鍵字return 返回多個值
def foo():
print(‘from foo:‘)
return 1, [2,3], (4,5), {‘a‘:1,‘b‘:2}
v = foo()
print(v)
本文出自 “linux技術” 博客,請務必保留此出處http://xiaojishu.blog.51cto.com/4278020/1926008
python文件操作及函數學習