1. 程式人生 > >python之路-09-文件操作

python之路-09-文件操作

binary 源文件 tin 判斷 覆蓋 循環 bin num 內容

9.1文件操作流程

1.打開文件,得到文件句柄並賦值給一個變量

2.通過句柄對文件進行操作

3.關閉文件

9.2 文件讀寫及關閉操作

#!Author:lanhan
#data = open("yesterday",encoding="utf-8").read()
#f = open("yesterday",‘w‘,encoding="utf-8") #文件句柄,也就是內存對象
f = open("yesterday",‘a‘,encoding="utf-8")
#讀文件,默認是r(讀)[文件讀一次後,再讀第二遍時從內容最下面繼續讀],w(寫,覆蓋原文件),a(在源文件基礎上追加).一次操作要麽是讀,要麽是寫,不能同時進行


#data = f.read()
#print(data)
f.write("\n我愛北京天安門。。。。。。。\n") #\n換行
f.write("天安門上太陽升。。。。。。。。。") #寫文件就是覆蓋原來文件,寫一個新文件
f.close() #關閉文件

擴展:

#f = open("yesterday",‘r+‘,encoding="utf-8") #r+ 讀寫(可讀可追加寫)
#f = open("yesterday",‘w+‘,encoding="utf-8") #w+ 寫讀(創建新文件追加寫,源文件不能讀,只能讀新創建的文件)
#f = open("yesterday",‘a+‘,encoding="utf-8") #a+ 追加讀寫


print(f.readline())
print(f.readline())
f.write("--------diao-----------1\n")
f.write("--------diao-----------1\n")
f.write("--------diao-----------1\n")
print(f.tell())
f.seek(10)
print(f.readline())
f.write("should be at the begining of the second line")
f.close()
#f = open("yesterday",‘rb‘) #二進制文件格式讀文件(網絡傳輸、視頻等)

f = open("yesterday",‘wb‘) #二進制文件格式寫文件(網絡傳輸、視頻等)

f = open("yesterday",ab‘)
f.write("hello binary\n".encode()) #.encode()將字符串轉換成二進制
f.close()

"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

  • rU
  • r+U

9.3 循環讀

#!Author:lanhan
f = open("yesterday",‘r‘,encoding="utf-8")
#讀取前5行(若是到第10行停止,加一個判斷即可)
#for i in range(5):
#print(f.readline())

‘‘‘#ow loop
#讀取文件的每一行(方法1和方法2,是將文件全部讀取到內存中,當數據量較大時,則內存可能被撐爆)
#for line in f.readlines(): #方法1
#print(line)
#方法2
for index,line in enumerate(f.readlines()):
if index == 9:
print(‘-----我是分割線----------‘)
continue
print(line.strip())
‘‘‘
#方法3(high bige) 讀一行,保存一行到內存中,再大數據也不怕
count = 0
for line in f:
if count == 9:
print(‘------我是分割線--------‘)
count += 1
continue
print(line)
count +=1

9.4 文件高級操作

#!Author:lanhan

f = open("yesterday",‘r‘,encoding="utf-8")
print(f.tell())
print(f.readline())
print(f.tell())
print(f.readline())
print(f.readline())
print(f.tell()) #打印當前指針位置
f.seek(10) #查找指針位置10,0是文件開頭
print(f.readline())

#f.detach() #文件編輯過程中,改變編碼
#print(f.fileno())#返回內存地址編號
#print(f.seekable()) #判斷指針是否能移動,能移動返回為true(d打印機不能移動)
print(f.encoding) #打印文件編碼
print(f.name) #打印文件名
print(f.writable()) #判斷文件可寫
print(f.flush()) #文件寫是先寫到內存中,然後內存達到一定值後,才寫進硬盤中,flush將寫入內存中的內容,強制刷新到硬盤
import sys,time
for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)

f = open("yesterday",‘a‘,encoding="utf-8")
#f.write("妹妹的")
f.seek(10)
f.truncate(20) #從指針位置往後截斷10個字符,指針前面內容保持不變(為空,清空文件)

技術分享圖片

技術分享圖片

9.5 文件修改

#!Author:lanhan
‘‘‘
f = open("yesterday","r",encoding="utf-8")
f_new = open("yesterday.bak","w",encoding="utf-8")
for line in f:
if "肆意的快樂等我享受" in line:
line = line.replace("肆意的快樂等我享受","肆意的快樂等lanhan享受")
f_new.write(line)
f.close()
f_new.close()
‘‘‘
import sys
f = open("yesterday","r",encoding="utf-8")
f_new = open("yesterday.bak","w",encoding="utf-8")
find_str = sys.argv[1]
replace_str = sys.argv[2]
for line in f:
if find_str in line:
line = line.replace(find_str,replace_str)
f_new.write(line)
f.close()
f_new.close()

擴展:

#!Author:lanhan
with open("yesterday","r",encoding="utf-8") as f: #當with代碼塊執行完畢時,內部會自動關閉並釋放文件資源
for line in f:
print(line)
‘‘‘
#with又支持同時對多個文件的上下文進行管理
with open("yesterday","r",encoding="utf-8") as f1, \ #官方建議一行代碼不超過80字符,多行時用\
open("yesterday2","r",encoding="utf-8") as f2
pass
‘‘‘

python之路-09-文件操作