【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 0False时,表示不进行缓冲,直接从磁盘读取或写入文件
    • 取值为 1 1 1True时,表示行缓冲,即每写入一行数据时,将其写入文件
    • 取值为大于 1 1 1的整数时,表示缓冲区的大小,以字节为单位,指定缓冲区大小可以提高文件的读取和写入效率
    • 取值小于 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二进制模式,用于访问二进制文件,与其他模式组合使用,如rbwbabrb+

读文件

  • 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。