Python3实现文件的增删改查操作
"这篇文档介绍了如何使用Python3进行文件的CRUD操作,即创建(Create)、读取(Read)、更新(Update)和删除(Delete)。提供的代码示例展示了如何实现这些基本功能。" 在Python中处理文件的CRUD操作是编程中常见的任务,特别是在数据管理或日志记录等场景下。下面将详细解释这段代码中涉及的知识点: 1. 文件编码声明:`#_*_coding:utf-8_*_` 这行代码是旧式的Python文件编码声明,表明该文件使用UTF-8编码,以便正确处理非ASCII字符。 2. `file_handle` 函数:这是处理文件的核心函数,接受四个参数:`filename`(文件名),`backend_data`(用于匹配和更新的特定字符串),`record_list`(待追加或替换的数据列表)和`type`(操作类型,'fetch', 'append', 或 'change')。 3. **读取操作 (Read)**:当`type`为'fetch'时,函数打开文件并逐行读取,查找匹配`backend_data`的行,然后将之后直到下一个以'backend'开头的行保存到列表`r_list`中。最后返回这个列表。 4. **追加操作 (Append)**:如果`type`为'append',函数首先创建一个新的文件`new_file`,然后将原始文件`filename`的内容逐行复制到新文件,接着将`record_list`中的数据追加到新文件。追加时,如果数据行以'backend'开头,则直接写入,否则在其前添加8个空格。完成追加后,重命名原始文件为备份文件,新文件成为新的原始文件,并删除备份文件。 5. **更新操作 (Update)**:当`type`为'change'时,同样先创建新文件,然后遍历原始文件。遇到与`backend_data`匹配的行时,标记`tag`为真,并在后续遍历中找到第一个不以'backend'开头的行,将其写入新文件。这确保了更新只发生在匹配的`backend_data`之后的第一个非'backend'行上。然后,将`record_list`中的所有行追加到新文件。更新完成后,处理文件重命名和删除与读取和追加相同。 6. `os`模块:`os.rename()` 用于重命名文件,`os.remove()` 用于删除文件。这里它们被用来在操作过程中移动和清理临时文件。 通过这个函数,你可以轻松地对文件执行CRUD操作,而无需编写复杂的文件处理逻辑。这在处理配置文件、日志文件或其他需要批量更新的数据文件时非常有用。然而,这段代码没有包含错误处理,实际应用时应考虑添加异常处理以增强健壮性。
import os
#文件处理
def file_handle(filename,backend_data,record_list=None,type='fetch'):
new_file=filename+'_new' #新的文件名字
bak_file=filename+'_bak' #把新的文件名改成bak
if type == 'fetch':
r_list = []
with open(filename, 'r') as f:
tag = False #定义一个tag很关键
for line in f:
if line.strip() == backend_data: #所查询的内容存在
tag = True
continue
#读取到下一个backend结束
if tag and line.startswith('backend'):
break
if tag and line:
r_list.append(line.strip())
for line in r_list:
print(line)
return r_list
elif type == 'append': #添加的文件处理
with open(filename, 'r') as read_file, \
open(new_file, 'w') as write_file:
for r_line in read_file: #把原文件的内容一一写到新的文件中
write_file.write(r_line)
for new_line in record_list: #把添加的记录写到文件中
if new_line.startswith('backend'): #如果列表中的元素是以backend开头的,直接写
else:
write_file.write("%s%s\n" % (' ' * 8, new_line)) #否则先写8个空格,再写列表元素
os.rename(filename, bak_file)
os.rename(new_file, filename)
os.remove(bak_file)#新文件覆盖原文件
elif type == 'change':
with open(filename, 'r') as read_file, \
open(new_file, 'w') as write_file:
tag=False
has_write=False
for r_line in read_file:
if r_line.strip() == backend_data:
tag=True
continue
if tag and r_line.startswith('backend'):
tag=False
if not tag:
write_file.write(r_line)
else:
if not has_write:
for new_line in record_list:
if new_line.startswith('backend'):
write_file.write(new_line+'\n')
else:
write_file.write('%s%s\n' %(' '*8,new_line))
has_write=True #很关键,否则会重复打印
os.rename(filename, bak_file)
os.rename(new_file, filename)
os.remove(bak_file)
剩余5页未读,继续阅读
- 粉丝: 28
- 资源: 22
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 达梦数据库DM8手册大全:安装、管理与优化指南
- Python Matplotlib库文件发布:适用于macOS的最新版本
- QPixmap小demo教程:图片处理功能实现
- YOLOv8与深度学习在玉米叶病识别中的应用笔记
- 扫码购物商城小程序源码设计与应用
- 划词小窗搜索插件:个性化搜索引擎与快速启动
- C#语言结合OpenVINO实现YOLO模型部署及同步推理
- AutoTorch最新包文件下载指南
- 小程序源码‘有调’功能实现与设计课程作品解析
- Redis 7.2.3离线安装包快速指南
- AutoTorch-0.0.2b版本安装教程与文件概述
- 蚁群算法在MATLAB上的实现与应用
- Quicker Connector: 浏览器自动化插件升级指南
- 京东白条小程序源码解析与实践
- JAVA公交搜索系统:前端到后端的完整解决方案
- C语言实现50行代码爱心电子相册教程