1. 程式人生 > >python文件操作及函數學習

python文件操作及函數學習

python文件操作和函數學習總結

  1. 文件操作

文件讀

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文件操作及函數學習