zoukankan      html  css  js  c++  java
  • 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语言及其应用》

  • 相关阅读:
    26 转义符 re模块 方法 random模块 collection模块的Counter方法
    25 正则表达式
    24 from 模块 import 名字
    24 from 模块 import 名字
    24 from 模块 import 名字
    23 析构方法 items系列 hash方法 eq方法
    21 isinstance issubclass 反射 _str_ _new_ _len_ _call_
    20 属性, 类方法, 静态方法. python2与python3的区别.
    python(1)
    python之字符串格式化
  • 原文地址:https://www.cnblogs.com/hycstar/p/9255024.html
Copyright © 2011-2022 走看看