文件读写操作


01.文件打开操作:

  • 使用open()方法可以开打一个文件并返回一个文件对象,其格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • open()方法的参数包括:
    • file,打开的文件名称,可以是相对或者绝对路径,默认我当前路径;也可以是一个整数,该整数为该文件的描述符。
    • mode,打开文件的模式:
      • r,只读打开,默认值;若文件不存在,则抛出异常。
      • w,只写打开;若文件存在,则覆盖写入;若文件不存在,则创建文件后写入。
      • x,创建并写入一个新文件;若文件存在,则抛出异常;若文件不存在,则创建后写入。
      • a,写入打开;若文件存在,则追加写入;若文件不存在,则创建文件后写入。
        • a+通常为推荐的方式。
      • b,以二进制模式打开(字节流),必须结合其他模式,比如rb表示二进制只读打开。
        • 如果使用二进制模式写入,通常会使用格式化,比如:object.write('example'.encode('utf-8'))
        • 如果使用二进制模式写入,使用encode()时要区分windows的gbk和linux的utf-8。
      • t,以文本模式打开(字符流),默认值,必须结合其他模式。
      • +,读写打开一个文件,给原来只读、只写打开方式提供缺失的读写能力。
        • +仅会给予额外缺失能力,不会修改文件对象打开发方式;即w+模式下,文件打开后即被清空。
    • buffering,文件缓冲区设置。
    • encoding,文件的编码方式;linux下默认为utf-8,windows下默认为cp936。
      • 文件若以字节模式打开,则不需要设置编码。
      • 文件写入的编码格式应与读取的编码格式一致。
      • 文件写入与读取都应该制定encoding,以避免跨平台的问题。
    • errors,什么样的编码错误将被捕获:
      • None及strict,有编码错误抛出ValueError异常。
      • ignore,忽略异常。
    • newline,文本模式中,换行的转换。
      • None,’\n’,’\r’,’\r\n’都被识别为换行符,且会将换行符替换为’\n’。
      • ’’,’\n’,’\r’,’\r\n’都被识别为换行符,但不会主动替换换行符。
      • ’\n’,只有’\n’会被识别为换行符。
      • ’\r\n’,只有’\r\n’会被识别为换行符。
    • closedf,关闭文件描述符;True表示关闭它,False表示会在文件关闭后保持这个描述符。
  • open方法的示例:
    myFile = open('/opt/Workspace/index.html', 'r', encoding='utf-8', newline=None)
    result = myFile.read()
    print(result)


02.文件读取操作:

  • 使用read()方法可以从打开的文件对象中返回字符流,其格式为:
read(size=-1, /)
  • read()方法的参数包括:
    • size,读取的字符的数量,如果未赋值或值为None,则读取到文件的末尾。
      • 若文件以字符流方式打开,read(n)表示读取n个字符;若文件以字节流方式打开,read(n)表示读取n个字节。
  • read()方法的示例:
    my_file = open('/opt/Workspace/test_read.txt', 'a+')
    my_file.write('Hello World\n')
    my_file.close()
    read_file = open('/opt/Workspace/test_read.txt', 'r')
    result = read_file.read(100)
    print(result)
    read_file.close()
  • 使用readline()方法可以从打开的文件对象,并且每次只读取一行,其格式为:
readine(size=-1, /)
  • readline()方法返回的是一个字符串。
  • readline()方法的参数包括:
    • size,读取的字符数量,如果未赋值或值为None,则读取一整行。
      • 若文件以字符流方式打开,read(n)表示读取n个字符;若文件以字节流方式打开,read(n)表示读取n个字节。
  • readline()方法的示例:
    my_file = open('/etc/passwd', 'r')
    while True:
      text_line = my_file.readline()
      if text_line:
          print(text_line.strip('\n'))
      else:
          break
    my_file.close()
  • 使用readlines()方法可以从打开的文件对象,并按照行分割符返回所有行的列表,其格式为:
readines(hint=-1, /)
  • readlines()方法返回的是一个列表。
  • readlines()方法的参数包括:
    • hint,读取的行数量,如果未赋值或值为None,则读取到文件的末尾。
      • 若文件以字符流方式打开,read(n)表示读取n个字符;若文件以字节流方式打开,read(n)表示读取n个字节。
  • readlines()方法的示例:
    my_file = open('/etc/passwd', 'r')
    result = my_file.readlines()
    for item in result:
      item = item.strip('\n')
      print(item)
    my_file.close()


03.文件写入操作:

  • 使用write()方法将数据写入打开的文件,其格式为:
write(text, /)
  • write()方法的参数包括:
    • text,要写入的数据,其类型为字符串或字节。
  • write()方法的示例:
    import os 
    #导入os模块
    my_list = ['wenjun', 'shengjianzhou', 'wangxiaoli']
    my_file = open('/opt/Workspace/test_read.txt', 'w+')
    for item in my_list:
        my_file.write(item+'\n')
    my_file.close()
    os.system('cat /opt/Workspace/test_read.txt')
  • 使用writelines()方法将多个数据写入打开的文件,其格式为:
write(lines, /)
  • write()方法的参数包括:
    • lines,要写入的数据,其类型为字符,字符串序列或字节。
      • lines的类型必须不能是数字序列,比如[1, 2, 3]。
  • writelines()方法的示例:
    my_list = ['110', '119', '120']
    my_file = open('/opt/Workspace/test_read.txt', 'w+')
    my_file.writelines(map(lambda x: x+'\n', my_list))
    my_file.seek(0)
    print(my_file.read())
    my_file.close()
文档更新时间: 2020-04-20 00:09   作者:闻骏