Python
中,打开文件使用的是open()
函数,open()
函数的基本语法如下open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
open()
函数参数解析file
:要打开的文件路径,可以是绝对路径也可以是相对路径mode
:打开文件的模式,默认为r
,表示以只读模式打开文件buffering
:缓冲策略,是一个可选参数,默认值为None
,表示使用系统默认的缓冲策略
False
时,表示不进行缓冲,直接从磁盘读取或写入文件True
时,表示行缓冲,即每写入一行数据时,将其写入文件encoding
:文件编码,是一个可选参数,默认值为None
,表示使用系统默认编码,常用编码包括'utf-8'
、'gbk'
等errors
:编码错误处理方案,是一个可选参数,默认值为None
,表示使用系统默认的错误处理方案,常用的取值包括'strict'
、'ignore'
、'replace'
等newline
:换行符处理,是一个可选参数,默认为None
,表示使用系统默认的换行符处理方式,常用的取值包括'\n'
、'\r\n'
等closefd
:关闭文件描述符,默认值为True
,表示在关闭文件的同时关闭文件描述符C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt
路径下的文件file = open('C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt')
file_name = file.name
print(file_name)
C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt
open()
函数返回一个File
对象,表示计算机中的一个文件,读取文件时需要文件已经存在,否则会引发FileNotFoundError
异常Windows
系统下,C
盘、D
盘等为根文件夹,在该盘符中的文件需要从根文件夹开始往下一级一级进行查找Linux
系统下,/
为根文件夹,所有文件的查找从/
开始file = open('C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt')
file_name = file.name
print(file_name)
C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/test.txt
C:/Users/FOLLOW_MY_HEART/Desktop/Python基础/【Python基础】文件读写/
,如果使用相对路径,就可以不写这个路径,用.
代替这个路径值file = open('./test.txt')
file_name = file.name
print(file_name)
./test.txt
open()
函数默认的打开文件的模式为r
,表示以只读模式打开文件模式 | 注释 |
---|---|
r | 只读模式,默认模式 |
w | 只写模式,写入的内容会覆盖文件原有的内容,如果文件不存在会创建文件再进行写入 |
a | 追加模式,在文件末尾追加内容,如果文件不存在会创建文件再进行写入 |
+ | 读写模式,与其他模式组合使用,如r+ ,w+ ,a+ 等 |
x | 创建模式,如果文件已经存在会引发异常 |
t | 文本模式,默认模式 |
b | 二进制模式,用于访问二进制文件,与其他模式组合使用,如rb ,wb ,ab ,rb+ 等 |
open()
函数返回的是一个File
对象,使用File
对象的read()
方法可以读取文件内容,以字符串类型返回read()
函数语法read(self, n=-1)
n
表示要读取的字符数,默认值为
?
1
-1
?1,表示读取整个文件内容
test.txt
文件中提前写入Hello, world!
,然后执行如下代码file = open('./test.txt', 'r')
res = file.read()
print(res)
Hello, world!
File
对象的write()
方法可以向文件写入内容,返回写入文件的字符串的长度file = open('./test.txt', 'w')
len = file.write('Hello!')
print(len)
file = open('./test.txt', 'r')
res = file.read()
print(res)
6
Hello!
w
模式写入的内容会覆盖文件原有的内容
如果想要向文件中追加内容,则使用a
模式
file = open('./test.txt', 'a')
file.write('\nHello!')
file = open('./test.txt', 'r')
res = file.read()
print(res)
Hello!
Hello!
\n
,可以实现文件中内容的换行readline()
、readlines()
、writelines()
方法用于按行读写文件readline()
readline()
方法默认情况下读取文件的一行内容,也可以指定在一行中读取的字符数file = open('./test.txt', 'w')
file.write('Hello, world!\nWelcome!')
file = open('./test.txt', 'r')
res1 = file.readline()
res2 = file.readline()
res3 = file.readline()
print(res1)
print(res2)
print(res3)
Hello, world!
Welcome!
readline()
方法读取当前文件指针所在的一行中的内容,以换行符\n
区分文件的每一行,如果readline()
方法返回一个空字符串,说明已经读取到文件的末尾readlines()
readlines()
方法读取文件的每一行内容,返回一个列表,列表中的每个元素就是文件中的每一行内容file = open('./test.txt', 'w')
file.write('Hello, world!\nWelcome!')
file = open('./test.txt', 'r')
res = file.readlines()
print(res)
['Hello, world!\n', 'Welcome!']
writelines()
writelines()
方法向文件写入每一行内容,传入一个列表,列表中的每个元素就是写入文件中的每一行内容file = open('./test.txt', 'w')
len = file.writelines(['Hello, world!\n', 'Welcome!'])
file = open('./test.txt', 'r')
res = file.read()
print(res)
Hello, world!
Welcome!
close()
方法,用于关闭文件file = open('./test.txt')
file_name = file.name
print(file_name)
file.close()
./test.txt
finally
语句try
语句发生异常时,即使使用了close()
方法,也可能不被执行close()
方法放在finally
语句中,从而保证无论程序是否发生异常都会调用close()
方法来关闭文件file = None
path = './test.txt'
try:
file = open(path, 'r')
except FileNotFoundError as e:
print(e)
finally:
if file:
print(file.name)
file.close()
./test.txt
Python
中的with
语句可以帮助我们自动调用close()
方法with open('./test.txt', 'r') as file:
file_name = file.name
print(file_name)
./test.txt
as
关键字用于将文件对象赋值给变量file
当with
语句中的代码运行结束时,会自动调用close()
方法
class OpenFile:
def __init__(self, file_name):
self.file_obj = file_name
def __enter__(self):
self.file_obj = open(self.file_obj, 'r', encoding='utf-8')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.file_obj.close()
def my_read(self):
print(self.file_obj.read())
with OpenFile('./test.txt') as file:
file.my_read()
Hello, world!
Welcome!
with
语句调用时会自动触发__enter__()
方法,用于打开文件with
语句中的代码运行结束时,会自动触发__exit__()
方法,用于关闭文件