当前位置: 首页 > article >正文

python 文件操作全知道 | python 小知识

python 文件操作全知道 | python 小知识

在Python中,处理文件和目录是一项基础且重要的任务。本文将带你了解几个常用的文件和目录处理模块:pathlibos.pathshutilos.walk,并通过具体的应用场景和代码示例来展示它们的使用方法。

1. pathlib模块

pathlib是Python 3.4引入的一个模块,它提供了一个面向对象的文件系统路径操作方法。Path类是pathlib模块的核心,它表示文件系统路径。

应用场景

  • 构建和操作文件路径。
  • 检查文件或目录是否存在。
  • 读取和写入文件。

代码示例

# 章节 1
from pathlib import Path

# 创建Path对象
home_dir = Path.home()

# 构建路径
my_file = home_dir / 'Documents' / 'example.txt'

# 检查文件是否存在
if my_file.exists():
    print(f"File exists: {my_file}")
else:
    print(f"File does not exist: {my_file}")

# 读取文件内容
if my_file.is_file():
    with my_file.open('r') as f:
        content = f.read()
        print(content)

解释

  • Path.home()返回用户的主目录。
  • 使用/操作符可以方便地构建路径。
  • exists()方法检查路径是否存在。
  • is_file()方法检查路径是否是一个文件。
  • open()方法用于打开文件并读取内容。

下面是更多的关于pathlib在不同场景下的例子和说明,以帮助你更深入地理解其用法。

场景一:文件路径的拼接与操作

示例

from pathlib import Path

# 创建Path对象
base_path = Path('/home/user')

# 拼接子路径
sub_path = base_path / 'documents' / 'file.txt'

# 输出拼接后的路径
print(sub_path)  # 输出: /home/user/documents/file.txt

# 获取父目录
parent_path = sub_path.parent
print(parent_path)  # 输出: /home/user/documents

# 获取文件名
file_name = sub_path.name
print(file_name)  # 输出: file.txt

# 获取文件扩展名
file_extension = sub_path.suffix
print(file_extension)  # 输出: .txt

说明

  • Path对象可以使用/操作符来方便地拼接路径。
  • parent属性用于获取路径的父目录。
  • name属性用于获取文件名。
  • suffix属性用于获取文件的扩展名。

场景二:检查文件或目录的存在性

示例

from pathlib import Path

# 创建Path对象
file_path = Path('/home/user/documents/file.txt')

# 检查文件是否存在
if file_path.exists():
    print(f"The file {file_path} exists.")
else:
    print(f"The file {file_path} does not exist.")

# 检查是否为文件
if file_path.is_file():
    print(f"{file_path} is a file.")

# 检查是否为目录
if file_path.is_dir():
    print(f"{file_path} is a directory.")

说明

  • exists()方法用于检查路径是否存在。
  • is_file()方法用于检查路径是否是一个文件。
  • is_dir()方法用于检查路径是否是一个目录。

场景三:创建和删除目录

示例

from pathlib import Path

# 创建Path对象
new_dir_path = Path('/home/user/new_directory')

# 创建目录(如果父目录不存在,则创建父目录)
new_dir_path.mkdir(parents=True, exist_ok=True)

# 删除目录(仅当目录为空时)
# new_dir_path.rmdir()  # 如果目录不为空,则会抛出异常

# 另一种删除目录的方法(无论目录是否为空,都会删除,但需要先导入shutil模块)
# import shutil
# shutil.rmtree(new_dir_path)  # 这将删除目录及其所有内容

说明

  • mkdir()方法用于创建目录。parents=True表示如果父目录不存在,则创建父目录;exist_ok=True表示如果目录已存在,则不抛出异常。
  • rmdir()方法用于删除空目录。如果目录不为空,则会抛出异常。
  • 如果要删除非空目录,可以使用shutil.rmtree()方法。

场景四:读取和写入文件内容

示例

from pathlib import Path

# 创建Path对象
file_path = Path('/home/user/documents/example.txt')

# 写入文件内容
file_path.write_text('Hello, world!')

# 读取文件内容
file_content = file_path.read_text()
print(file_content)  # 输出: Hello, world!

说明

  • write_text()方法用于将字符串写入文件。如果文件不存在,则会创建该文件。
  • read_text()方法用于读取文件内容,并将其作为字符串返回。

场景五:遍历目录下的文件

示例

from pathlib import Path

# 创建Path对象
dir_path = Path('/home/user/documents')

# 遍历目录下的所有文件
for file_path in dir_path.iterdir():
    if file_path.is_file():
        print(file_path)

说明

  • iterdir()方法用于遍历目录下的所有文件和子目录。
  • 可以结合is_file()方法来判断遍历到的路径是否为文件。

通过以上示例和说明,你应该能够更深入地理解pathlib模块在不同场景下的用法。希望这些示例对你有所帮助!

2. os.path模块

os.path模块提供了许多用于路径操作的函数,这些函数是基于字符串的。

应用场景

  • 拼接路径。
  • 获取文件的扩展名。
  • 转换路径为绝对路径。

代码示例

# 章节 2
import os

# 拼接路径
my_dir = os.path.join('Users', 'Documents')
my_file = os.path.join(my_dir, 'example.txt')

# 获取文件的扩展名
file_ext = os.path.splitext(my_file)[1]

# 转换路径为绝对路径
abs_path = os.path.abspath(my_file)

print(f"Joined path: {my_file}")
print(f"File extension: {file_ext}")
print(f"Absolute path: {abs_path}")

解释

  • os.path.join()用于拼接路径,可以处理不同操作系统的路径分隔符。
  • os.path.splitext()用于分离文件名和扩展名。
  • os.path.abspath()用于获取路径的绝对形式。

3. shutil模块

shutil模块提供了一些高级的文件操作,如复制、移动和删除文件及目录。

应用场景

  • 复制文件或目录。
  • 移动文件或目录。
  • 删除文件或目录。

代码示例

# 章节 3
import shutil

# 复制文件
src_file = 'source.txt'
dst_file = 'destination.txt'
shutil.copy(src_file, dst_file)

# 移动文件(重命名)
old_file = 'destination.txt'
new_file = 'renamed.txt'
shutil.move(old_file, new_file)

# 删除文件
file_to_delete = 'renamed.txt'
if os.path.exists(file_to_delete):
    os.remove(file_to_delete)  # 或者使用 shutil.rmtree() 删除目录

解释

  • shutil.copy()用于复制文件。
  • shutil.move()用于移动或重命名文件。
  • os.remove()用于删除文件(shutil.rmtree()用于删除目录)。

4. os.walk函数

os.walk是一个生成器函数,用于在目录树中游走,生成目录路径、目录名和文件名。

应用场景

  • 遍历目录树。
  • 收集目录和文件信息。
  • 执行批量操作,如批量重命名或删除文件。

代码示例

# 章节 4
import os

# 遍历目录树
root_dir = '.'  # 当前目录
for root, dirs, files in os.walk(root_dir):
    print(f"Root directory: {root}")
    for dir_name in dirs:
        print(f"Directory: {dir_name}")
    for file_name in files:
        print(f"File: {file_name}")

解释

  • os.walk(root_dir)遍历root_dir目录树。
  • root是当前遍历到的目录路径。
  • dirs是当前目录下的子目录列表。
  • files是当前目录下的文件列表。

5. 总结

通过本文的介绍和代码示例,你应该已经了解了Python中处理文件和目录的基本方法。pathlibos.pathshutilos.walk是处理文件和目录的常用模块和函数,它们提供了丰富的功能来满足不同的需求。在实际开发中,你可以根据具体的应用场景选择合适的模块和函数来操作文件和目录。

希望这篇博客对你理解Python文件目录访问有所帮助!如果你有任何问题或建议,请随时在评论区留言。


http://www.kler.cn/a/527673.html

相关文章:

  • C语言【基础篇】之流程控制——掌握三大结构的奥秘
  • QT简单实现验证码(字符)
  • 【漫话机器学习系列】068.网格搜索(GridSearch)
  • 知识管理系统塑造企业文化与学习型组织的变革之路
  • Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
  • 【Valgrind】安装报错: 报错有未满足的依赖关系: libc6,libc6-dbg
  • 36. printf
  • 团体程序设计天梯赛-练习集——L1-029 是不是太胖了
  • 大模型高频知识汇总:查漏补缺参考大全
  • 【Redis】set 和 zset 类型的介绍和常用命令
  • oracl:多表查询>>表连接[内连接,外连接,交叉连接,自连接,自然连接,等值连接和不等值连接]
  • Docker小游戏 | 使用Docker部署跳一跳经典小游戏
  • 23.Word:小王-制作公司战略规划文档❗【5】
  • Python3 + Qt5:实现AJAX异步更新UI
  • EtherCAT主站IGH-- 25 -- IGH之fsm_slave_scan.h/c文件解析
  • DeepSeek 使用初体验
  • Git的安装步骤详解(复杂的安装界面该如何勾选?)
  • 在线知识库创建与维护提升企业效率与知识共享能力
  • 【Unity3D】实现横版2D游戏角色二段跳、蹬墙跳、扶墙下滑
  • Linux Vim编辑器:快捷键与高效编辑技巧
  • C语言指针专题一 -- 指针基础原理
  • 【Linux】使用管道实现一个简易版本的进程池
  • Pandas 常用函数
  • 【PLL】杂散生成和调制
  • (动态规划基础 打家劫舍)leetcode 198
  • 简要介绍C++中的 max 和 min 函数以及返回值