1. open() 方法
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")
来源:https://www.cnblogs.com/juno3550/p/12324162.html