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')