''' 1. 什麼是檔案: 檔案是操作 系統給使用者/應用程式操作硬碟的一種虛擬的概念/介面 使用者/應用程式 作業系統(檔案) 計算機硬體(硬碟) 2. 為何要用檔案 使用者/應用程式可以透過檔案將資料永久儲存的硬碟中,即操作檔案就是操作硬碟 使用者/應用程式直接操作的是檔案,對檔案進行的所有的操作都是在向作業系統呼叫,然後再由操作將其轉換成具體的硬碟操作 3. 如何使用檔案 open() 控制檔案讀寫內容的模式 t和b不能單獨使用,必須與r/w/a連用 t文字 (預設的模式)1讀寫都以str(unicode)為單位的;2.文字檔案 3.必須指定encoding='utf-8' b二進位制/bytes 控制檔案讀寫操作的模式 r:只讀模式 w:只寫模式 a:只追加寫模式 +:r+、w+、a+ ''' ''' 操作檔案''' # 1. 開啟檔案 # f=open(r'aaa/a.txt',mode='rt') #f的值是一種變數,佔用的是應用程式的記憶體空間 # #print(f) #<_io.TextIOWrapper name='aaa/a.txt' mode='r' encoding='UTF-8'> # # 2.操作檔案,讀/寫檔案 # res=f.read() # print(res) # # 3. 關閉檔案 # f.close() #回收作業系統資源 # #del f #回收應用程式資源 # print(f) # f.read() #ValueError: I/O operation on closed file. '''with 語法''' # with open(r"aaa/a.txt",mode='wt',encoding='utf-8') as f1,\ # open(r'aaa/b.txt') as f2: # # res1=f1.read() #解碼:windows預設是gbk,linux utf-8, # # res2=f2.read() # # print(res1,res2) # res1=f1.write("哈哈哈") # print(res1) # '''''' # username='dandan' # password='123' # inp_username=input("please input your name: ").strip() # inp_password=input("please input your password: ").strip() # if inp_username==username and inp_password==password: # print("you login successfully!") # else: # print("the name or password is incorrect!") # inp_username = input("please input your name: ").strip() # inp_password = input("please input your password: ").strip() # with open(r"aaa/user.txt",mode='rt',encoding='utf-8') as f1: # for line in f1: # # print(line,end='') # username,password=line.strip().split(':') # # print(line) # if inp_username==username and inp_password==password: # print("you login successfully!") # break # else: # print("the name or password is incorrect!") '''w :不建議用開啟,一開啟就清空啦''' # with open("aaa/c.txt",mode='wt',encoding='utf-8') as f: # f.write("wu~~~\n") #以w模式開啟檔案沒有關閉的情況下,連續的寫,新的內容總在舊的後面 # with open("aaa/c.txt",mode='wt',encoding='utf-8') as f: # f.write("wu~~~\n") # f.write("hahahah\n") # f.write("第三行\n") #重新以w模式開啟檔案,則會清空檔案內容 # with open("aaa/c.txt",mode='wt',encoding='utf-8') as f: # f.write("1.wu~~~\n") # with open("aaa/c.txt",mode='wt',encoding='utf-8') as f: # f.write("2.hahaha~~~\n") # with open("aaa/c.txt",mode='wt',encoding='utf-8') as f: # f.write("3.666~~~\n") '''a:只追加寫,在檔案不存在的時候''' # with open("aaa/d.txt",mode='at',encoding='utf-8') as f: # # f.read() #io.UnsupportedOperation: not readable # f.write("開始寫內容了") # with open("aaa/d.txt",mode='at',encoding='utf-8') as f: # # f.read() #io.UnsupportedOperation: not readable # f.write("\n2。之前的內容還在") #相同點:在開啟的檔案不關閉的情況下,連續的寫入,新寫的內容總會在前寫的後面 #不同點:以a模式重新開啟檔案,不會清空原檔案內容,會將檔案指標直接到檔案的末尾 #一般是用來記錄日誌 #a 模式用來在原有內容的基礎上進行追加,例如使用者註冊功能 # name=input("please input your name: ") # pwd=input("please input your password: ") # with open("aaa/user.txt",mode="at",encoding='utf-8') as f: # f.write("{}:{}\n".format(name,pwd)) """w 用作建立全新的檔案 """ ##檔案的copy工具: # with open("aaa/user.txt",mode="rt",encoding="utf-8")as f1,\ # open("aaa/user01.txt",mode="wt",encoding="utf-8")as f2: # res=f1.read() # f2.write(res) # src_file=input("原始檔檔案:") # dst_file=input("目標檔案:") # with open(r"{}".format(src_file),mode="rt",encoding="utf-8")as f1,\ # open(r"{}".format(dst_file),mode="wt",encoding="utf-8")as f2: # res=f1.read() # f2.write(res) '''b 模式 binary 模式,讀寫都是以bytes 為單位,可以針對所有檔案,*一定不能指定utf-8''' # with open(r"aaa/WechatIMG4.jpeg",mode='rb') as f: # res=f.read() #硬碟的二進位制讀入記憶體->b模式下,不做任何轉換,直接讀入記憶體 # print(res) #byte型別-->當成二進位制 '''指標移動的單位都是以bytes/位元組為單位 只有一種特殊情況:t模式下的read(n),n 代表的是字元個數''' # with open(r'aaa/d.txt',mode='rt',encoding='utf-8')as f: # res=f.read(4) # print(res) # f.seek(n,模式);n指的是移動的位元組個數 #模式: '''0:參照物是檔案開頭位置''' # f.seek(9,0) # f.seek(3,0) #3 '''1:參照物是當前指標所在位置''' # f.seek(9,1) # f.seek(3,1) #12 '''2:參照物是檔案的末尾位置,應該是倒著移動''' # f.seek(-9,2) #3 # f.seek(-3,2) #9 # # f.tell() #獲取當前指標的位置 with open(r"aaa/a.txt",mode='rt') as f: f.seek(9,0) f.seek(3,0) print(f.tell()) res=f.read() print(res)