python_文件操作

  • 2020 年 1 月 22 日
  • 筆記

一、文件處理基本形式

# 1. 打開文件,得到文件句柄並賦值給一個變數  # 文件句柄 = open('文件路徑', '模式', '操作文件的字元編碼')    f = open('carter', 'r', encoding='UTF-8')  # 默認打開模式就為r    # 2. 通過句柄對文件進行操作  data = f.read()  print(data)    # 3. 關閉文件  f.close()  # 回收作業系統的資源

二、打開文件的模式

1. 打開文件的模式有(默認為文本模式):    r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】  w,只寫模式【不可讀;不存在則創建;存在則清空內容】  a, 之追加寫模式【不可讀;不存在則創建;存在則只追加內容】    2. 對於非文本文件,我們只能使用b模式,"b"表示以位元組的方式操作(而所有文件也都是以位元組的形式存儲的,使用這種模式無需考慮文本文件的字元編碼、圖片文件的jgp格式、影片文件的avi格式)    rb  wb  ab  註:以b方式打開時,讀取到的內容是位元組類型,寫入時也需要提供位元組類型,不能指定編碼    3. 了解部分    "+" 表示可以同時讀寫某個文件  r+, 讀寫【可讀,可寫】  w+,寫讀【可讀,可寫】  a+, 寫讀【可讀,可寫】    x, 只寫模式【不可讀;不存在則創建,存在則報錯】  x+ ,寫讀【可讀,可寫】  xb

三、操作文件的方法

f.read() #讀取所有內容,游標移動到文件末尾  f.readline() #讀取一行內容,游標移動到第二行首部  f.readlines() #讀取每一行內容,存放於列表中    f.write('1111n222n') #針對文本模式的寫,需要自己寫換行符  f.write('1111n222n'.encode('utf-8')) #針對b模式的寫,需要自己寫換行符  f.writelines(['333n','444n']) #文件模式  f.writelines([bytes('333n',encoding='utf-8'),'444n'.encode('utf-8')]) #b模式    #了解  f.readable() #文件是否可讀  f.writable() #文件是否可讀  f.closed #文件是否關閉  f.encoding #如果文件打開模式為b,則沒有該屬性  f.flush() #立刻將文件內容從記憶體刷到硬碟  f.name

小練習

while True:      msg = """n33[0;34m1 註冊n2 查看33[0m      """      print(msg)      choice = input('33[31;0m請輸入編號>>:33[0m').strip()      if choice == '1':          # print('註冊')          phone = input('33[32;0m請輸入手機號>>>:33[0m').strip()          name = input('33[33;0m請輸入用戶名>>>:33[0m').strip()          pwd = input('33[34;0m請輸入密碼>>>:33[0m').strip()          sex = input('33[35;0m請輸入性別>>>:33[0m').strip()          age = input('33[36;0m請輸入年齡>>>:33[0m').strip()          with open('db.txt', 'a', encoding='UTF-8') as f:              f.write('%s,%s,%s,%s,%sn' % (phone, name, pwd, sex, age))        elif choice == '2':          # print('查看')          phone = input('33[37;0m請輸入手機號:33[0m').strip()          with open('db.txt', 'rt', encoding='UTF-8') as f:              for line in f:                  if line.startswith(phone):                      print(line, end='')                  else:                      print('33[31;1m此用戶還沒註冊33[1m')                      break        else:          print('33[31;1m輸入的不正確33[1m')