• Python文件IO(普通文件读写)


    ## 打开一个文件
      - fileobj = open(filename, mode)
      其中:
        fileobj是open()返回的文件对象
        filename是该文件的字符串名
        mode是指明文件类型和操作的子字符串
      
      - mode的第一个字母表示对其的操作
        - r表示读取
        - w表示写入,如果文件不存在就创建,如果存在则重新写入新内容
        - x表示在文件不存在的情况下新创建并写文件
        - a表示如果文件存在,在文件末尾追加内容

      - mode的第二个字母是文件类型
        - t(或者省略)代表文本类型
        - b代表二进制文件

    ## 使用write()写入文件,使用close()关闭文件

    1 poem = """
    2     离离原上草,一岁一枯荣。
    3     野火烧不尽,春风吹又生。
    4     远芳侵古道,晴翠接荒城。
    5     又送王孙去,萋萋满别情。
    6 """
    7 file_obj = open("", 'wt')   # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
    8 file_obj.write(poem)         # 写入文件
    9 file_obj.close()             # 关闭文件

      - 也可以使用print()写入文件

    1 poem = """
    2     离离原上草,一岁一枯荣。
    3     野火烧不尽,春风吹又生。
    4     远芳侵古道,晴翠接荒城。
    5     又送王孙去,萋萋满别情。
    6 """
    7 file_obj = open("", 'wt')   # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
    8 print(poem, file=file_obj)   # 写入文件
    9 file_obj.close()             # 关闭文件

      - 如果需要写入的内容非常多,可以将数据分块写入

     1 poem = """
     2     离离原上草,一岁一枯荣。
     3     野火烧不尽,春风吹又生。
     4     远芳侵古道,晴翠接荒城。
     5     又送王孙去,萋萋满别情。
     6 """
     7 file_obj = open("", 'wt')   # 打开名为‘诗’的文本文件,若‘诗’不存在则创建
     8 
     9 start = 0
    10 chunk = 20    # 每次写入20个字符
    11 while True:
    12     if start > len(poem):       
    13         break
    14     file_obj.write(poem[start:start+chunk])
    15     start += chunk
    16 
    17 file_obj.close()             # 关闭文件

    ## 文件读取
      - read():不带参数的read()函数一次读取文件的所有内容

     1 file_obj = open("", 'rt')  # 使用读取模式打开文本文件
     2 poem = file_obj.read()      # 读取文件中所有内容
     3 file_obj.close()            # 关闭文件
     4 print(poem)
     5 """
     6 输出:
     7     离离原上草,一岁一枯荣。
     8     野火烧不尽,春风吹又生。
     9     远芳侵古道,晴翠接荒城。
    10     又送王孙去,萋萋满别情。
    11 """

     

       - 同样可以分块读取

     1 poem = ''
     2 file_onj = open("", 'rt')
     3 chunk = 20  # 每次读取20个字符
     4 while True:
     5     frag = file_onj.read(chunk)
     6     if not frag:    # 读到文件末尾时再次调用read()函数会返回空字符串,not frag为真,执行break
     7         break
     8     poem += frag
     9 
    10 print(poem)
    11 """
    12 输出:
    13     离离原上草,一岁一枯荣。
    14     野火烧不尽,春风吹又生。
    15     远芳侵古道,晴翠接荒城。
    16     又送王孙去,萋萋满别情。
    17 """

      - 一行一行的读取

     1 poem = ''
     2 file_obj = open('', 'rt')
     3 while True:
     4     line = file_obj.readline()
     5     if not line:
     6         break
     7     poem += line
     8 
     9 print(poem)
    10 """
    11 输出:
    12     离离原上草,一岁一枯荣。
    13     野火烧不尽,春风吹又生。
    14     远芳侵古道,晴翠接荒城。
    15     又送王孙去,萋萋满别情。
    16 """

      - 使用迭代器读取文件

     1 poem = ''
     2 file_obj = open("", 'rt')
     3 for line in file_obj:       # 效果相同,但代码更短
     4     poem += line
     5 
     6 print(poem)
     7 """
     8 输出:
     9     离离原上草,一岁一枯荣。
    10     野火烧不尽,春风吹又生。
    11     远芳侵古道,晴翠接荒城。
    12     又送王孙去,萋萋满别情。
    13 """

      - readlines():每次读取一行,并返回单行字符串的列表

     1 file_obj = open("", 'rt')
     2 lines = file_obj.readlines()
     3 print(lines)
     4 for line in lines:
     5     print(line, end='')
     6     
     7 """
     8 ['
    ', '    离离原上草,一岁一枯荣。
    ', '    野火烧不尽,春风吹又生。
    ', '    远芳侵古道,晴翠接荒城。
    ', '    又送王孙去,萋萋满别情。
    ']
     9 
    10     离离原上草,一岁一枯荣。
    11     野火烧不尽,春风吹又生。
    12     远芳侵古道,晴翠接荒城。
    13     又送王孙去,萋萋满别情。
    14 """

    ## write()写入二进制文件

    1 bin_data = bytes(range(0, 255)) # 将序列转换为二进制数据
    2 f = open('bin_file', 'wb')      # 以二进制文件的格式打开文件
    3 f.write(bin_data)               # 写入
    4 f.close()                       # 关闭

      - 分段写入

     1 bin_data = bytes(range(0, 255))
     2 f = open('bin_file', 'wb')
     3 chunk = 100     # 每次写入100个字节
     4 offset = 0
     5 while True:
     6     if offset > len(bin_date):
     7         break
     8     f.write(bin_data[offset:chunk + offset])
     9     offset += chunk
    10 
    11 f.close()

      - 读取二进制文件

    1 f = open('bin_file', 'rb')
    2 bin_data = f.read()
    3 f.close()

    ## 使用with自动关闭文件,with代码块执行完毕后自动关闭文件

     1 with open("", 'rt') as f:
     2     poem = f.read()
     3 
     4 print(poem)
     5 """
     6 输出:
     7     离离原上草,一岁一枯荣。
     8     野火烧不尽,春风吹又生。
     9     远芳侵古道,晴翠接荒城。
    10     又送王孙去,萋萋满别情。
    11 """

    本文参考:

      [美]Bill Lubanovic 《Python语言及其应用》

  • 相关阅读:
    相由心生
    超级唯美的爱情语句(中英)
    有多少人败给“对不起,家里不同意”
    请善待老公,其实男人不容易
    摩托车西藏之旅实战攻略
    女人眼里36种不靠谱男人
    什么是爱?什么是幸福?
    踏板车的节油措施汇总
    史上最无语最蛋疼新闻标题
    太他妈幽默了,丫不去写书真浪费了
  • 原文地址:https://www.cnblogs.com/hycstar/p/9255024.html
Copyright © 2020-2023  润新知