【Python基础】文件读写
2023-12-20 00:13:06
打开文件
- 在
Python
中,打开文件使用的是open()
函数,open()
函数的基本语法如下
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
open()
函数参数解析
file
:要打开的文件路径,可以是绝对路径也可以是相对路径mode
:打开文件的模式,默认为r
,表示以只读模式打开文件buffering
:缓冲策略,是一个可选参数,默认值为None
,表示使用系统默认的缓冲策略- 取值为
0
0
0或
False
时,表示不进行缓冲,直接从磁盘读取或写入文件 - 取值为
1
1
1或
True
时,表示行缓冲,即每写入一行数据时,将其写入文件 - 取值为大于 1 1 1的整数时,表示缓冲区的大小,以字节为单位,指定缓冲区大小可以提高文件的读取和写入效率
- 取值小于 0 0 0时,使用系统默认的缓冲策略
- 取值为
0
0
0或
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,表示读取整个文件内容- 取值大于 0 0 0时,读取文件的前 n n n个字符
- 取值等于 0 0 0时,不会读取任何字符,返回空字符串
- 取值小于 0 0 0时,读取整个文件内容
示例
- 在
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__()
方法,用于关闭文件 - 自定义读写类展示了上下文管理器的底层实现
文章来源:https://blog.csdn.net/from__2023_11_28/article/details/135096240
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!