Python 文件及目录操作指南

news2024/9/25 13:15:25

文章目录

  • 前言
  • 一、常用标准库
    • 1. os 模块
    • 2. shutil 模块
    • 3. pathlib 模块
    • 4. io 模块
  • 二、操作过程及内容
    • 步骤一:环境准备
    • 步骤二:文件操作
    • 步骤三:目录遍历
    • 步骤四:综合脚本
    • 操作结果
  • 总结


前言

在日常开发中,文件和目录操作是必不可少的一部分。Python 提供了许多内置模块,使得文件和目录的操作变得十分方便和高效。通过本指南,您将掌握以下知识点:

  1. 文件操作:使用 Python 打开、读取和写入文件。
  2. 目录遍历:使用 os 模块遍历指定目录,列出所有文件和子目录。
  3. 数据处理与存储:将处理后的数据分别存储到不同的文件中。
  4. 综合运用:结合文件操作和目录遍历,实现综合功能的 Python 脚本。

在这里插入图片描述


一、常用标准库

Python 中用于文件操作的标准库有几个主要的模块和包,每个模块都有其特定的功能。以下是一些常用的标准库:

1. os 模块

os 模块提供了一些与操作系统交互的功能,尤其是文件和目录操作。

  • os.open(), os.close():低级别的文件打开和关闭。
  • os.listdir():列出指定目录中的所有文件和子目录。
  • os.mkdir(), os.makedirs():创建目录。
  • os.remove(), os.unlink():删除文件。
  • os.rmdir(), os.removedirs():删除目录。
  • os.path:包含许多处理文件路径的方法,如 os.path.join(), os.path.exists(), os.path.isfile(), os.path.isdir()

2. shutil 模块

shutil 模块提供了一些高级的文件操作功能,如复制和删除目录树。

  • shutil.copy(), shutil.copy2(), shutil.copyfile():复制文件。
  • shutil.move():移动文件或目录。
  • shutil.rmtree():递归删除目录树。

3. pathlib 模块

pathlib 模块提供了面向对象的文件系统路径操作接口,更加直观和易用。

  • Path 对象:表示文件系统路径。
  • Path.mkdir():创建目录。
  • Path.unlink():删除文件。
  • Path.rmdir():删除目录。
  • Path.iterdir():生成目录中的所有条目。

4. io 模块

io 模块提供了核心工具来处理流式 I/O,如文件读取和写入。

  • io.open():与内置的 open() 函数类似。
  • io.StringIOio.BytesIO:在内存中操作文本和二进制数据的流。

二、操作过程及内容

步骤一:环境准备

  1. 安装并配置 Python 开发环境,不会配置的可以参考该篇文章喔🚪
  2. 创建所需的输入文件 input.txt,并在该文件中写入一些初始内容以供读取。如下图:
    在这里插入图片描述

步骤二:文件操作

  1. 读取文件内容:编写函数 read_file(file_path),接受一个文件路径作为参数,读取文件内容并返回。调用 Python 自带的 open() 函数以只读 r 的方式打开文件,在 open() 函数中增加参数 encoding="utf-8,确保文件内容为 UTF-8 编码格式。文件中存储的内容是中文,编码格式是utf-8格式,而Windows系统的默认编码是gbk,故需要在open()函数中指定字符编码utf-8,否则程序会出现异常。对返回的文件对象f调用read()函数读取文件的内容,调用该函数读取 input.txt 文件内容。
# 1. 打开一个文件,并将文件内容读取出来
def read_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    return content
  1. 写入文件内容:编写函数 write_file(content, new_content, output_file_path),将读取的内容和新内容写入到指定的文件中。以覆盖写 w 的模式打开要输出的文件,文件不存在则创建,存在则完全覆盖。对返回的文件对象f调用write()函数将读取的内容换行后和新内容一起写入到output.txt
# 2. 将读取的内容写入另外一个文件,增加新的内容
def write_file(content, new_content, output_file_path):
    with open(output_file_path, 'w', encoding='utf-8') as file:
        file.write(content)
        file.write("\n")  # 添加一个换行符
        file.write(new_content)
        
write_file(content, '这是新内容', 'output.txt')

步骤三:目录遍历

  1. 遍历目录:编写函数 list_files_and_directories(directory_path),遍历指定目录,返回文件和子目录的列表。初始化用于存放文件和子目录的两个列表,使用os模块中的walk()函数遍历指定目录,获取指定路径下的所有目录和文件信息
    再对得到的目录名称和文件名称遍历,分别拼接在root目录后面填入到列表中,调用该函数,获取指定目录的文件和子目录列表。

walk()函数的返回值是一个生成器,生成器的每一个元素都是一个三元组(root,dirs,files)root是指当前正在遍历的文件夹的路径;dirs是一个列表,包含当前文件夹下所有目录的名称;files是一个列表,包含当前文件夹下所有文件的名称。

# 3. 对指定目录进行遍历,并列出其中所有的文件和子目录
def list_files_and_directories(directory_path):
    files = []
    directories = []
    for root, dirs, file_names in os.walk(directory_path):
        for dir_name in dirs:
            directories.append(os.path.join(root, dir_name))
        for file_name in file_names:
            files.append(os.path.join(root, file_name))
    return files, directories
  1. 编写函数 write_list_to_file(items, output_file_path),将列表 items 写入到指定文件,每个项占一行。以覆盖写的方式打开要输出的文件,遍历输入的列表items,将每一项数据都写入到文件中,调用该函数,将文件列表写入 files_list.txt,将目录列表写入 directories_list.txt
# 4. 将列出的文件和子目录分别写入两个不同的文件中
def write_list_to_file(items, output_file_path):
    with open(output_file_path, 'w', encoding='utf-8') as file:
        for item in items:
            file.write(item + "\n")

步骤四:综合脚本

编写主程序,整合上述各步骤的函数,完成指定的功能:

if __name__ == "__main__":
    # 设置文件路径
    input_file_path = 'verse.txt'  # 替换为要读取的文件路径
    intermediate_output_file_path = 'output.txt'
    final_files_list_output_path = 'files_list.txt'
    final_directories_list_output_path = 'directories_list.txt'
    directory_to_traverse = 'D:/hjy/python学习/workspace/pythonProject'  # 替换为要遍历的目录路径

    # 读取文件内容
    file_content = read_file(input_file_path)

    # 写入新的内容到另外一个文件
    new_content = "这是添加的新内容。"
    write_file(file_content, new_content, intermediate_output_file_path)

    # 遍历目录,列出所有文件和子目录
    files, directories = list_files_and_directories(directory_to_traverse)

    # 将文件列表和目录列表分别写入两个不同的文件中
    write_list_to_file(files, final_files_list_output_path)
    write_list_to_file(directories, final_directories_list_output_path)

    print("操作完成,结果已写入相应文件。")

操作结果

运行这个python程序,控制台打印,操作完成,结果已写入相应文件。
在这里插入图片描述

检查输出的文件,Output.txt在原内容的基础上换行后添加了新内容
在这里插入图片描述
files_list.txt输出了指定目录下的所有文件
在这里插入图片描述
directories_list.txt输出了指定目录下的所有子目录
在这里插入图片描述


总结

通过本篇博客,我们详细介绍了如何使用 Python 进行文件和目录操作。首先,我们了解了几个常用的标准库如 os、shutil、pathlib 和 io 的基本用法。接着,我们通过具体的示例展示了如何读取和写入文件,如何遍历目录并列出其中的文件和子目录,最后将这些操作整合到一个完整的脚本中。希望这篇博客能帮助读者更好地理解和运用 Python 进行文件和目录操作,如果有任何疑问或者建议,欢迎留言讨论🌹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1949748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WAF+API安全代表厂商|瑞数信息入选IDC报告《生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势》

近日,全球领先的权威资讯机构IDC正式发布《IDC Market Presentation:生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势,2024》报告。报告中IDC 评估了众多厂商的安全硬件产品能力,并给出了产品对应的推荐厂商供最终用户参…

电脑屏幕录制软件哪个好?推荐3款,满足各种录制需求

大家好,今天和大家来聊一个既实用又有点神秘的话题——电脑屏幕录制软件哪个好?这是个让众多网友头疼的问题,毕竟谁不想拥有一款既好用又好玩的录制神器呢? 首先,我们得明确屏幕录制软件可不是简单地录屏而已&#xf…

IEC104转MQTT网关支持将IEC104数据转换为华为云平台可识别的格式

随着智能电网和物联网技术的深度融合,传统电力系统中的IEC104协议设备正逐步向更加开放、智能的物联网体系转型。华为云作为全球领先的云计算和AI服务提供商,其物联网平台为IEC104设备的接入与数据处理提供了强大的支撑。本文将探讨IEC104转MQTT网关在MQ…

WPF MVVM框架:CommunityToolkit.Mvvm包使用介绍

最近在需要使用MVVM框架的时候才发现MvvmLight作者宣布停止更新了,有点可惜。 原作者推荐使用CommunityToolkit.Mvvm包,所以这里做一个CommunityToolkit.Mvvm包使用的全面的总结。 开发环境: Visual Studio 2019Windows 10 1903CommunityTo…

Centos安装、迁移gitlab

Centos安装迁移gitlab 一、下载安装二、配置rb修改,起服务。三、访问web,个人偏好设置。四、数据迁移1、查看当前GitLab版本2、备份旧服务器的文件3、将上述备份文件拷贝到新服务器同一目录下,恢复GitLab4、停止新gitlab数据连接服务5、恢复备…

Idea如何查看Maven依赖树

1、使用idea自带的功能查看依赖树 2、使用Maven Helper插件 https://zhuanlan.zhihu.com/p/699663369

Linux中MySQL 双主复制(互为主从)配置指南(详细过程)!

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…

stats 监控 macOS 系统

Stats 监控 macOS 系统 CPU 利用率GPU 利用率内存使用情况磁盘利用率网络使用情况电池电量 brew install stats参考 stats github

[Unity] ShaderGraph实现DeBuff污染 溶解叠加效果

本篇是在之前的基础上,继续做的功能衍生。 [Unity] ShaderGraph实现Sprite消散及受击变色 完整连连看如下所示:

分布式事务(典型的分布式事务场景+CAP+解决方案)

分布式事务与分布式锁的区别: 分布式锁解决的是分布式资源抢占的问题;分布式事务和本地事务是解决流程化提交问题。 SQL中的4个事务隔离级别:(1)读未提交(2)读已提交(3&#xff09…

【React】详解样式控制:从基础到进阶应用的全面指南

文章目录 一、内联样式1. 什么是内联样式?2. 内联样式的定义3. 基本示例4. 动态内联样式 二、CSS模块1. 什么是CSS模块?2. CSS模块的定义3. 基本示例4. 动态应用样式 三、CSS-in-JS1. 什么是CSS-in-JS?2. styled-components的定义3. 基本示例…

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)

这是项目的初始页面 接下来我先写下我的初始项目搭建 技术支持:JAVA、JSP 服务器:TOMCAT 7.0.86 编程软件:IntelliJ IDEA 2021.1.3 x64 首先我们打开页面,准备搭建项目的初始准备 1.New Project 2.随后点击Next,勾…

【数据结构】顺序表(杨辉三角、简单的洗牌算法)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 💪💪💪 谢谢你这么帅…

【机器学习】GPT LoRA:大模型微调的艺术与效率

文章目录 往期热门专栏回顾1、前言介绍 1.1、文生图效果 2、LoRA的工作原理3、LoRA的应用场景4、LoRA的优势5、LoRA的挑战6、LoRA的实现7、未来展望 1、前言介绍 在深度学习和自然语言处理领域,大规模预训练模型(如GPT-3、BERT等)已经展示了…

ansible基础讲解和加密文件讲解

ansible最重要的三个文件 /etc/ansible/ansible.cfg #####ansible的配置文件 /etc/ansible/host ##清单文件inventory ansible-navigator.yml ####以yml结尾的文件可以理解为conf结尾的文件,是配置文件,用于设置剧本playbook playbook讲解 以.yml结…

【Android】Activity与Fragment的数据传递

上一篇文章学到了碎片的创建与生命周期,接下来学习碎片的常用操作,其中会用到上一篇文章的三个碎片,就做一个简单的说明吧:LeftFragment(包含一个按钮)、RightFragment4(以粉色为背景的文本&…

优化医疗数据管理:Kettle ETL 数据采集方案详解

在现代医疗保健领域,数据的准确性、完整性和及时性对于提高医疗服务质量和患者护理至关重要。为了有效管理和利用医疗数据,Kettle ETL(Extract, Transform, Load)数据采集方案成为了许多医疗机构的首选工具之一。本文将深入探讨Ke…

【Gitlab】SSH配置和克隆仓库

生成SSH Key ssh-keygen -t rsa -b 4096 私钥文件: id_rsa 公钥文件:id_rsa.pub 复制生成的ssh公钥到此处 克隆仓库 git clone repo-address 需要进行推送和同步来更新本地和服务器的文件 推送更新内容 git push <remote><branch> 拉取更新内容 git pull &…

MySQL数据库的DQL的高级数据查询语句

目录 非等值联查&#xff1a; 等值联查&#xff1a; eg&#xff1a;5张表联查 连接查询——left/right/inner join on eg: 连接查询——union Eg&#xff1a; 不去重的并集——union all 子查询&#xff08;内部查询&#xff09; 1、where型子查询 2、from型子查询&a…

Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类

目录 HTTP协议 什么是HTTP协议 HTTP协议的特点 请求的HTTP协议格式 GET请求 POST请求 常用的请求头说明 哪些是GET请求&#xff0c;哪些是POST请求 响应的HTTP协议格式 常见的响应码说明 MIME类型说明 HttpServletRequest类 作用 常用方法 如何获取请求参数 po…