檔案存取
文章推薦指數: 80 %
tags: `python` # 檔案存取## 路徑* 相對路徑: * 以目前python程式碼檔案所在位置為基準,標示另外檔案所在位置* 開發專案建議使用相對. ownedthisnote Published LinkedwithGitHub Like Bookmark Subscribe Edit ######tags:`python` #檔案存取 ##路徑 *相對路徑: *以目前python程式碼檔案所在位置為基準,標示另外檔案所在位置 *開發專案建議使用相對路徑標示,方便未來重複使用較方便 *絕對路徑: *從磁碟機根目錄為基準,標示另外檔案所在位置 ##檔案 *不管是只要讀取檔案內容或是修改檔案內容,都必須先開啟檔案 *檔案使用完畢請關閉檔案,釋放記憶體空間 開啟模式 |模式|說明|檔案指標|檔案存在|檔案不存在| |--------|----|----|-------|---| |r|讀取模式|檔案開頭||錯誤| |w|寫入模式|檔案開頭|清除原有內容|建立檔案| |a|寫入模式|檔案結尾|附加到檔案後面|建立檔案| |r+|讀寫模式|檔案開頭|覆蓋原有內容|錯誤| |w+|讀寫模式|檔案開頭|清除原有內容|建立檔案| |a+|讀寫模式|檔案結尾|附加到檔案後面|建立檔案| |b|二進位格式|||| ##寫入檔案 ```python= userInfoFile=open(r"userinfo.txt","w") userInfoFile.write("小明男1234567890\n")#\n表示換行 userInfoFile.write("小嫻女0123456789\n") userInfoFile.close() ``` ##讀取檔案:讀取指定字數 f.read(n):讀取檔案n個英文字或n個中文字的內容 ```python= articleFile=open(r"userinfo.txt","r") content=articleFile.read(6)#只抓取6個文字 print(content) ``` **用vscode儲存會預設以UTF-8編碼中文字 ```python= articleFile=open(r"userinfo.txt","r",encoding='utf-8') content=articleFile.read(6)#只抓取6個文字 print(content) ``` **用「windows記事本」儲存會預設以big5編碼中文字 ```python= articleFile=open(r"big5_test.txt","r",encoding='big5') content=articleFile.read(6)#只抓取6個文字 print(content) ``` ##移動n個位元 *開啟檔案時必須以**二進位模式**開啟檔案 f.seek(n):檔案指標(filepointer)移動n個byte數 *f.seek(位移n個byte數,0)-從文件開頭開始 *f.seek(位移n個byte數,1)-從目前游標位置開始 *f.seek(位移n個byte數,2)-從目前文件結尾開始 **英文文字:** ```python= articleFile=open(r"userinfo.txt","rb") content=articleFile.read(2)#只抓取2個文字 print(content) content=articleFile.read(2)#只抓取2個文字 print(content) articleFile.seek(2,0) content=articleFile.read(2)#只抓取2個文字 print(content) articleFile.close() ``` **中文文字:** ```python= articleFile=open(r"article.txt","rb+") content=articleFile.read(2*6)#只抓取6個文字 print(str(content,'big5')) articleFile.seek(2*6,1) content=articleFile.read(2*6) print(str(content,'big5')) articleFile.close() ``` ##讀取檔案:一次讀取一個段落的資料(直到遇到enter) ```python= articleFile=open(r"article.txt","r") content=articleFile.readline() whilecontent!='': print(content) content=articleFile.readline() articleFile.close() ``` ##讀取檔案:讀取所有行並以list方式回傳資料 ```python= articleFile=open(r"article.txt","r") content=articleFile.readlines() print(content) print(content[1])#顯示地2行的內容 forlineincontent: print(line) articleFile.close() ``` ##檔案及資料夾管理 *exist:檔案或資料夾是否存在 *isabs:是否為檔案或資料夾的絕對路徑 *isdir:是否為資料夾 *isfile:是否為檔案 ```python= importos print(os.getcwd()) print('目前路徑位置',os.path.abspath('.')) print('目前路徑的上一層位置',os.path.abspath('..')) print('目前檔案的絕對路徑',os.path.abspath('test.py')) print('目前路徑到指定路徑的相對路徑',os.path.relpath('c:\\')) print('是否存在該資料夾或檔案',os.path.exists('testFolder')) print('testFolder是否為資料夾',os.path.isdir('testFolder')) print('test.py是否為檔案',os.path.isfile('test.py')) ``` *mkdir:建立資料夾 *rmdir:刪除資料夾,內部不能有檔案或資料夾 *remove:刪除檔案 *chdir:改變目前目錄位置 ```python= importos,shutil defshow_menu(): print(""" 1.顯示目前路徑 2.進入指定路徑 3.顯示目前路徑檔案及資料夾 4.建立資料夾 5.修改資料夾名稱 6.刪除資料夾 E.離開 """) returninput("請根據所需功能輸入數字:") if__name__=='__main__': flag=True whileflag: fun=show_menu() iffun=='1': print('目前路徑為:%s'%os.path.abspath('.')) eliffun=='2': path=input('請輸入要移到的路徑:') os.chdir(path) print('目前路徑已改為:',os.path.abspath('.')) eliffun=='3': forfileinos.listdir('.'): print('',file) eliffun=='4': folder=input('請輸入要建立的資料夾名稱:') os.mkdir(folder) eliffun=='5': old_name=input('請輸入要修改的資料夾名稱:') new_name=input('請輸入要改成新的資料夾名稱:') shutil.move(old_name,new_name) eliffun=='6': folder=input('請輸入要刪除的資料夾名稱:') os.rmdir(folder) eliffun=='e': flag=False ``` ##建立資料夾 ```python= importos folder=input('請輸入要建立的資料夾名稱:') os.mkdir(folder) print('資料夾%s成功'%folder) ``` ##修改資料夾或檔案名稱 ```python= importshutil old_name=input('請輸入要修改的資料夾名稱:') new_name=input('請輸入要改成新的資料夾名稱:') shutil.move(old_name,new_name) print('資料夾%s已更改為%s'%(old_name,new_name)) ``` ##刪除資料夾 ```python= importos folder=input('請輸入要刪除的資料夾名稱:') os.rmdir(folder) print('檔案%s刪除成功'%folder) ``` ##刪除檔案 ```python= importos file=input('請輸入要刪除的檔案名稱:') os.remove(file) print('檔案%s刪除成功'%file) ``` ##連接路徑 ```python= importos path=os.path.join('c:\\','Users','Public','Music','SampleMusic') print(path) os.chdir(path) forfileinos.listdir('.'): print('',file) ``` ##顯示資料夾底下所有子資料夾及檔案 參考資料:[Python列出目錄中所有檔案教學:os.listdir與os.walk](https://blog.gtwang.org/programming/python-list-all-files-in-directory/) ```python= fromosimportwalk mypath=input("請輸入要查詢的資料夾絕對路徑:") #指定要列出所有檔案的目錄 ifnotmypath: mypath="/home/amos/正式區" #遞迴列出所有子目錄與檔案 forroot,dirs,filesinwalk(mypath): print("路徑:",root) print("目錄:",dirs) print("檔案:",files) ``` ##完全複製來源資料夾到目標資料夾 ```python= importshutil fromosimportwalk source_path=input("請輸入來源資料夾的絕對路徑:") target_path=input("請輸入目標資料夾的絕對路徑:") shutil.copytree(source_path,target_path) ``` ##在指定目錄建立所有資料夾 ```python= importos folders=['music','picture','doc','save'] base_path=input('請輸入專案路徑:') try: ifnotos.path.exists(base_path): os.mkdir(base_path) forfolderinfolders: path=os.path.join(base_path,folder) os.mkdir(path) except: print('專案資料夾建立錯誤') ``` ##取得檔案大小 ```python= importos file=input('請輸入要查詢的檔案:') print('檔案%s大小為:%sbytes'%(file,os.path.getsize(file))) ``` ##範例:讀寫密碼檔 ```python= classSoftware: def__init__(self): articleFile=open(r"id.acc","r") content=articleFile.readlines() self.__name=content[0][:-1] self.__password=content[1] self.__article=None self.__logined=False self.__content='' deflogin(self): name=input('請輸入帳號:') password=input('請輸入密碼:') ifself.__name==nameandself.__password==password: self.__logined=True print('youarelogin!',self.__logined) else: print('帳號或密碼錯誤,請重新輸入') deflogout(self): self.__logined=False print('youarelogout',self.__logined) defchange_pw(self): ifself.__logined: new_password=input('請輸入新密碼:') new_password2=input('請再輸入新密碼:') ifnew_password==new_password2: self.__password=new_password userInfoFile=open(r"id.acc","w") userInfoFile.write(self.__name+"\n")#\n表示換行 userInfoFile.write(self.__password) userInfoFile.close() print(self.__password) else: print('上下密碼不一致,請重新輸入') else: self.login() defpost(self): ifself.__logined: self.__content=input('請輸入文章內容:') else: self.login() defread(self): ifself.__logined: print(self.__content) else: self.login() mydictionary=Software() mydictionary.login() #mydictionary.logout() mydictionary.change_pw() #mydictionary.post() #mydictionary.read() ``` × Signin Email Password Forgotpassword or Byclickingbelow,youagreetoourtermsofservice. SigninviaFacebook SigninviaTwitter SigninviaGitHub SigninviaDropbox SigninviaGoogle NewtoHackMD?Signup
延伸文章資訊
- 1python之檔案批量更名及檔名批量儲存 - 程式人生
python之檔案批量更名及檔名批量儲存. 阿新• • 發佈:2018-12-22. 如果self.savefilenameformat輸入為空的情況下,將資料夾中的檔名下入txt文字以及其他型...
- 2【Python 筆記】 Python 檔案讀寫 - 9notes
按路徑存檔csv
- 3如何在變數作為檔名的一部分開啟python中的檔案? - 程式人生
檔名的數字是1-32,我想按如下迴圈順序開啟它們: i = 1 while i < 32: filename = "C:\\Documents and Settings\\file[i].txt...
- 4Python 從路徑獲取不帶副檔名的檔名 - Delft Stack
下面的程式碼示例演示瞭如何使用 path().stem 從檔案路徑中獲取不含副檔名的檔名。 Python. pythonCopy from pathlib import Path file_pa...
- 5檔案存取
tags: `python` # 檔案存取## 路徑* 相對路徑: * 以目前python程式碼檔案所在位置為基準,標示另外檔案所在位置* 開發專案建議使用相對.