文件操作

笑着哭i 提交于 2020-02-18 22:43:58

1. open() 方法

1.1 文件的打开与关闭

1.2 文件的读写

2. os 模块

 

 

1. open() 方法

1.1 文件的打开与关闭

open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

f = open(file, "r")f.close()

若使用 with open(),则文件对象在操作完后会自动 close。

with open(file, "r") as f:
    # 操作文件

# 无需 f.close()

open()方法完整的参数有:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • file: 必需,文件路径(相对或者绝对路径)
  • mode: 可选,文件打开模式,默认为"r"
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型

常见的访问模式

访问模式说明
r (read)以只读方式打开文件(这是默认模式),文件的指针将会放在文件的开头。若文件不存在则报错。
w (write)打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a (add)打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb (b:binary)以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。若文件不存在则报错。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 

1.2 文件的读写

写数据

1 f = open("test.txt", "w")  # 以写模式在当前目录打开test.txt
2 f.wirte("Hello world, I am here.")  # 写入内容
3 f.close()  # 关闭文件对象

 读数据

注意:如果多次使用了读函数,那么后面函数读取的数据是从上次函数读完后的位置开始的。

常见的读数据函数:

  • read(num):num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

  • readlines():按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

  • readline():只读取一行数据。

 1 >>> with open("test.txt", "w") as f:
 2 ...     f.write("Hello world.\ni am here.\nwhat about you?")
 3 ...
 4 39
 5 >>> f = open("test.txt", "r")
 6 >>> f.read(5)  # 读取5个字节的数据
 7 'Hello'
 8 >>> f.read()  # 读取余下全部数据
 9 ' world.\ni am here.\nwhat about you?'
10 >>> f.close()
11 >>> with open("test.txt", "r") as f:
12 ...     f.readline()  # 读取一行数据
13 ...
14 'Hello world.\n'
15 >>> with open("test.txt", "r") as f:
16 ...     f.readlines()
17 ...
18 ['Hello world.\n', 'i am here.\n', 'what about you?']

 处理大文件的方式

 1 old_file = "old_file.txt"
 2 new_file = "new_file.txt"
 3 
 4 old_f = open(old_file, "r")
 5 new_f = open(new_file, "w")
 6 
 7 while 1:
 8     # 每次从旧文件读取1024字节大小的数据写入新文件
 9     content = old_f.read(1024)
10     if len(content) == 0:
11         break
12     new_f.write(content)
13     
14 old_f.close()
15 new_f.close()

 应用:文件备份

 1 file_name = input("请输入要拷贝的文件名:")
 2 
 3 # 取文件的后缀名
 4 file_suffix_index = file_name.rfind(".")
 5 if file_suffix_index > 0:
 6     file_suffix = file_name[file_suffix_index:]
 7 
 8 # 命名新文件名
 9 new_file_name = file_name[:file_suffix_index] + "_backup" + file_suffix
10 
11 # 读取旧文件数据到新文件中
12 old_file = open(file_name, "r")
13 new_file = open(new_file_name, "w")
14 
15 while 1:
16     content = old_file.read(1024)
17     print(content)
18     if len(content) == 0:
19         break
20     new_file.write(content)
21 
22 old_file.close()
23 new_file.close()

定位读写

获取当前读写的位置

在读写文件的过程中,如果想知道当前的位置,可以使用 tell() 来获取。

 1 # 打开一个已经存在的文件
 2 f = open("file.txt", "r")
 3 str = f.read(3)
 4 
 5 # 查找当前位置
 6 position = f.tell()
 7 print("当前文件位置 : ", position)  # 3
 8 
 9 str = f.read(3)
10 
11 # 查找当前位置
12 position = f.tell()
13 print("当前文件位置 : ", position)  # 6
14 
15 f.close()

 定位到某个位置

如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用 seek()。

seek(offset, from):

  • offset:偏移量
    • 正数:往右偏移
    • 负数 :往左偏移
  • from:方向
    • 0:表示从文件开头开始
    • 1:表示从当前位置开始
    • 2:表示从文件末尾开始
 1 # 打开一个已经存在的文件
 2 f = open("test.txt", "r")
 3 str = f.read(30)
 4 print("读取的数据是 : ", str)
 5 
 6 # 查找当前位置
 7 position = f.tell()
 8 print("当前文件位置 : ", position)
 9 
10 # 重新设置位置:从文件开头偏移5个字节
11 f.seek(5, 0)  
12 
13 # 重新设置位置:从文件末尾偏移3个字节
14 f.seek(-3, 2)
15 
16 # 查找当前位置
17 position = f.tell()
18 print("当前文件位置 : ", position)
19 
20 str = f.read()
21 print("读取的数据是 : ", str)  # 文件最后3个字节数据
22 
23 f.close()

 

2. os 模块

 os 模块提供了非常丰富的方法用来处理文件和目录。

文件的重命名、删除

1 import os
2 
3 # 文件重命名
4 os.rename("old_file_name", "new_file_name")
5 # 文件删除
6 os.remove("new_file_name")

文件夹的相关操作

 1 import os
 2 
 3 # 获取当前工作目录
 4 os.getcwd()
 5 
 6 # 改变工作目录为
 7 os.chdir("../")
 8 
 9 # 遍历当前目录的所有文件及文件夹
10 os.listdir("./")
11 
12 # 创建文件夹
13 os.mkdir("dir_name")
14 
15 # 删除文件夹
16 os.rmdir("dir_name")
17 
18 # 重命名文件
19 os.rename("old_file_name", "new_file_name")

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!