欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-21 21:09:37
## 打开一个文件 - fileobj = open(filename, mode) 其中: fileobj是open()返回的文件对象 filename是该文件的字符串名 mode是指明文件类型和操作的子字符串 - mode的第一个字母表示对其的操作 - r表示读取 - w表示写入,如果文件不存在 ......

## 打开一个文件
  - 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语言及其应用》