🍀 前言
博客地址:
- CSDN:https://blog.csdn.net/powerbiubiu
👋 简介
本系列文章主要分享文件操作,了解如何使用 Python 进行文件的读写操作,介绍常见文件格式的读取和写入方法,包括TXT、 CSV、JSON、XML 等,以及如何使用相应的 Python 库来处理这些文件格式,同时对数据进行持久化操作。本章节就从最常见的TXT文件开始。
📖 正文
1 open
文件准备
春眠不觉晓
处处闻啼鸟
迎来风雨声
花落知多少
1.1 读取文件内容
f = open('test.txt', 'r', encoding='utf-8')
res = f.read()
print(res)
f.close()
#春眠不觉晓
#处处闻啼鸟
#迎来风雨声
#花落知多少
Tips:
读取文件的时候,这个文件必须存在,否则会抛异常
1.1 内容写入文件
在对文件写入内容的时候,若指定的文件不存在,则会自动创建
f = open('test1.txt', 'w', encoding='utf-8')
s = '春眠不觉晓\n处处闻啼鸟\n迎来风雨声\n花落知多少\n'
f.write(s)
f.close()
但是存在一个问题,如果在执行一次以上代码,文件中的内容被覆盖了,没有实现追加,如果需要实现对文件内容的追加,需要指定参数mode
的值为a
才能实现追加功能
f = open('test1.txt', mode='a', encoding='utf-8')
s = '春眠不觉晓\n处处闻啼鸟\n迎来风雨声\n花落知多少\n'
f.write(s)
f.close()
1.3 模式详解
mode | 含义 |
---|---|
r | 只读的方式打开文件,文件指针在文件的开头 |
r+ | 读写的方式打开文件,文件指针在文件的开头 |
w | 打开一个文件只用于写入,并从头开始编辑,原有内容会被删除 |
w+ | 打开一个文件用于读写,并从头开始编辑,原有内容会被删除 |
a | 打开一个文件用于追加,文件指针在文件结尾 |
a+ | 打开一个文件用于读写,文件指针在文件结尾 |
这里不涉及对二进制的操作,所以只列举文本操作使用的mode参数。
1.4 文件读写方法
f.read()
:一次性读取所有内容f.readline()
:按行读取,一次读取一行内容f.readlines()
:返回一个列表,列表中每个元素就是一行内容f.readable()
:判断文件是否可读,可读返回True,否则返回Falsef.write(s)
:将s写入文件f.seek(0)
:将文件指针移到文件开头,可以在支持读写的情况下使用,先下如内容,然后将文件指针指向开头,在读取文件内容
1.5 上下文管理
使用方法和open一样,这种是通过上下文管理器的方式进行文件读写,在结束后,可以省略close操作,一搬正常情况下,可以使用with open进行操作
只读模式
with open('test.txt', 'r') as f:
content = f.read()
只写模式
with open('test.txt', 'w') as f:
f.write('Hello, World!')
追加模式
with open('test.txt', 'a') as f:
f.write('append Hello, World!')
2 封装工具类
使用场景:假设需要对人的姓名,年龄,性别信息进行保存,通过txt文件进行存储。
import os.path
class FileTools:
def __init__(self, file: str, sp: str = ','):
"""
初始化
:param file: 文件
:param sp: 分割字符,默认逗号,
"""
if not os.path.exists(file):
# 文件不存在,创建文件
with open(file, 'w') as f:
pass
self.file = file
self.sp = sp
def read(self) -> list:
"""
读取所有内容,返回列表
:return:
"""
with open(self.file, 'r+', encoding='utf-8') as f:
content = f.readlines()
return [i.strip().split(self.sp) for i in content]
def append(self, *args) -> None:
"""
追加写入
:param content:
:return:
"""
try:
with open(self.file, 'a+', encoding='utf-8') as f:
if len(args) == 1:
f.write(args[0] + '\n')
else:
f.write(self.sp.join(args) + '\n')
except TypeError as e:
print(f"写入文件异常:{e}")
if __name__ == '__main__':
ft = FileTools('users.txt')
ft.append('张三', '19', '男')
ft.append('李四', '20', '女')
print(ft.read())
# [['张三', '19', '男'], ['李四', '20', '女']]
这里通过不定长参数args
来接收需要写入的内容,通过初始化默认的,
来进行拼接,所以当添加了两条数据后,文件中的内容如下:
张三,19,男
李四,20,女
然后读取的时候,同样通过默认的,
进行分割处理,将结果通过列表嵌套列表返回
✏ 总结
with open
文件操作,更多的是文件进行读与写的操作,并不支持更新删除功能,这需要通过读取所有内容,来筛选数据进行删除,更新,然后再将数据覆盖原文件,这种操作属于数据库增删改查功能。