在Python 中,对文件的操作有很多种,常见的操作包括创建、删除、修改权限、读取、写入等。
在 Python 中,如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象,而这些工作可以通过内置的 open() 函数实现。
open() 函数:用于打开一个文件,并返回文件对象。如果该文件无法被打开,会抛出 OSError。
该函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode=‘r’)
该函数的完整语法格式如下:
fileObj = open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
mode 参数:
文件打开模式值如下(文件打开模式,直接决定了后续可以对文件做哪些操作
):
文件的操作一般分为以下 3 步:
注意:使用 open() 方法打开的文件,使用完之后一定要关闭文件。
示例代码如下:
try:
file = open("a.txt", encoding="utf-8")
print(file)
except:
raise
finally:
file.close()
当以默认模式打开文件时,默认使用 r 权限,由于该权限要求打开的文件必须存在,否则会报错:FileNotFoundError。
示例代码如下:
# 当前程序文件同目录下没有 a.txt 文件
file = open("a.txt")
print(file)
在程序文件同目录下,手动创建一个 a.txt 文件,并再次运行该程序,就ok了。
使用 open() 打开文件时,不同平台的 ecoding 默认参数值也不同。可以手动指定打开文件的编码格式。
file = open("a.txt", encoding="utf-8")
print(file) # <_io.TextIOWrapper name='a.txt' mode='r' encoding='utf-8'>
注意:
手动修改 encoding 参数的值,仅限于文件以文本的形式打开。如果是以二进制格式打开时,不能对 encoding 参数的值做任何修改,否则程序会抛出 ValueError 异常。
成功打开文件之后,可以调用文件对象本身拥有的属性获取当前文件的部分信息。
其常见的属性为:
示例代码如下:
# 以默认方式打开文件
f = open('a.txt')
# 输出文件是否已经关闭
print(f.closed) # False
# 输出访问模式
print(f.mode) # r
#输出编码格式
print(f.encoding) # win下:cp936 相当于GBK
# 输出文件名
print(f.name) # a.txt
file 对象使用 open 函数来创建,常用的函数如下:
close() 函数:专门用来关闭已打开文件的对象。
该语法的基本格式如下:
file.close()
file = open("a.txt", encoding="utf-8")
print(file)
file.close()
读取文件数据操作时,需要保证使用 open() 函数是可读模式打开文件(包括 r、rb、r+、rb+ 4 种),否则会抛出 io.UnsupportedOperation 错误。
Python 提供了如下 3 种函数,它们都可以帮我们实现读取文件中数据的操作:
(1)read() 函数示例
# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", encoding="utf-8")
# 输出读取到的数据
print(f.read())
# print(f.read(2)) # size参数:用于指定一次最多可读取的字符(字节)个数。默认不写表示读取一次性读取所有内容。
# 关闭文件
f.close()
(2)readline() 函数示例
# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", encoding="utf-8")
# 读取一行数据
con = f.readline() # abc
print(con)
# 关闭文件
f.close()
(3)readlines() 函数示例
# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", encoding="utf-8")
# 读取一行数据
con = f.readlines()
print(con) # ['abc\n', ' q\n', '1231']
# 关闭文件
f.close()
向文件中写入数据操作时,需要保证使用 open() 函数是以可写模式打开文件(包括 r+、w、w+、a 或 a+ 的模式),否则会抛出 io.UnsupportedOperation 错误。
Python 提供了下面 2 种函数:
(1)write() 函数示例
# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", 'w', encoding="utf-8")
# w:清空原内容,写入一行数据
f.write("写入一行数据wwww")
f.flush()
# 关闭文件
f.close()
flush() 函数:
它可以实现将缓冲区的数据写入文件中。
(2)writelines() 函数示例
f = open("a.txt", 'w', encoding="utf-8")
list = ['abc\n', ' q\n', '1231']
list.append("\t写入字符串列表数据") # ['abc\n', ' q\n', '1231', '\t写入字符串列表数据']
print(list)
# 写入字符串列表数据
f.writelines(list)
f.flush()
# 关闭文件
f.close()
文件指针用于标明文件读写的起始位置。
使用 open() 函数打开文件并读取文件中的内容时,总是会从文件的第一个字符(字节)开始读起。
注意:
当向文件中写入数据时,如果不是文件的尾部,写入位置的原有数据不会自行向后移动,新写入的数据会将文件中处于该位置的数据直接覆盖掉。
Python file对象提供了 tell() 函数和 seek() 函数。
(1)tell() 函数示例
f = open("a.txt", 'r', encoding="utf-8")
print(f.tell()) # 0
print(f.read(2)) # ab
print(f.tell()) # 2
(2)seek() 函数示例
该函数的语法格式如下:
file.seek(offset[, whence])
f = open("a.txt", 'r', encoding="utf-8")
# 将文件指针从文件开头,向后移动到 5 个字符的位置
f.seek(2)
print(f.tell()) # 2
print(f.read(2)) # c
f.close()
1、with as语句
在 Python 中,使用 with as 语句操作上下文管理器(context manager),它能够帮助我们自动分配并且释放资源。
with 语句用于异常处理时,可以理解为封装了 try…except…finally 编码范式,简化了文件流等公共资源的管理。使得代码更清晰、更具可读性。
该语句的基本语法格式为:
with 表达式 [as target]:
代码块
示例代码如下:
with open('a.txt', 'a', encoding="utf-8") as f:
f.write(" with as语句操作")
– 求知若饥,虚心若愚。