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 ['\n', '    离离原上草,一岁一枯荣。\n', '    野火烧不尽,春风吹又生。\n', '    远芳侵古道,晴翠接荒城。\n', '    又送王孙去,萋萋满别情。\n']
 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语言及其应用》

猜你喜欢

转载自www.cnblogs.com/hycstar/p/9255024.html