Python文件与目录操作指南

news2024/12/31 19:53:00

Python文件与目录操作指南

在Python中,文件与目录的操作是日常编程中不可或缺的一部分。Python提供了多个模块来简化这些操作,包括pathlibos.pathfileinputstatfilecmptempfileglobfnmatchlinecacheshutil等。本文将详细介绍这些模块的使用方法,并通过示例代码帮助你更好地理解它们的功能。

1.1 pathlib —— 面向对象的文件路径操作

pathlib模块提供了面向对象的文件路径操作方式,相比传统的字符串操作,pathlib使得路径操作更加直观和易读。

主要功能

  • pathlib.Path(): 创建一个指定路径的Path对象。
  • Path.cwd(): 返回当前工作目录。
  • Path.home(): 返回用户的主目录。
  • Path.glob(pattern): 返回匹配指定模式的文件生成器。

使用示例

from pathlib import Path

# 创建路径对象
path = Path("my_folder") / "subfolder" / "file.txt"
print(path)  # 输出: my_folder/subfolder/file.txt

# 检查文件或目录是否存在
path = Path("example.txt")
if path.exists():
    print("文件存在")
else:
    print("文件不存在")

# 创建目录
path = Path("new_directory")
path.mkdir(exist_ok=True)  # 如果目录已存在,不会抛出错误

# 文件读写
path = Path("sample.txt")
path.write_text("Hello, World!")
content = path.read_text()
print(content)  # 输出: Hello, World!

# 获取父目录和扩展名
path = Path("my_folder/subfolder/file.txt")
print(path.parent)  # 输出: my_folder/subfolder
print(path.suffix)  # 输出: .txt

1.2 os.path —— 路径名操作

os.path模块提供了操作文件路径的函数,适用于跨平台的文件路径操作。

主要功能

  • os.path.join(path, *paths): 跨平台地拼接路径。
  • os.path.split(path): 分割路径为目录和文件名。
  • os.path.exists(path): 检查路径是否存在。
  • os.path.normpath(path): 规范化路径。
  • os.path.splitext(path): 获取文件扩展名。

使用示例

import os

# 路径拼接
path = os.path.join("my_folder", "subfolder", "file.txt")
print(path)  # 输出: my_folder/subfolder/file.txt

# 路径分割
dir_name, file_name = os.path.split("my_folder/subfolder/file.txt")
print(dir_name)  # 输出: my_folder/subfolder
print(file_name)  # 输出: file.txt

# 获取扩展名
root, ext = os.path.splitext("my_folder/subfolder/file.txt")
print(root)  # 输出: my_folder/subfolder/file
print(ext)   # 输出: .txt

# 路径规范化
normalized_path = os.path.normpath("my_folder//subfolder/../file.txt")
print(normalized_path)  # 输出: my_folder/file.txt

# 检查路径是否存在
if os.path.exists("my_folder/subfolder/file.txt"):
    print("文件存在")
else:
    print("文件不存在")

1.3 fileinput —— 多输入流的行迭代

fileinput模块用于从多个输入流(如文件或标准输入)中逐行读取数据。

主要功能

  • fileinput.input(files): 依次处理多个文件。
  • fileinput.filename(): 返回当前处理的文件名。

使用示例

import fileinput

# 从多个文件中读取行
for line in fileinput.input(files=["file1.txt", "file2.txt"]):
    print(line.strip())

# 从标准输入读取行
for line in fileinput.input():
    print(line.strip())

1.4 stat —— 文件状态信息

stat模块用于获取文件或目录的状态信息,并解析这些信息。

主要功能

  • os.stat(path): 获取文件或目录的状态信息。
  • os.lstat(path): 获取符号链接本身的状态信息。

使用示例

import os
import stat

# 获取文件状态信息
file_info = os.stat('example.txt')
print(f"文件大小: {file_info.st_size} 字节")
print(f"最后修改时间: {file_info.st_mtime}")

# 检查文件类型
if stat.S_ISDIR(file_info.st_mode):
    print("这是一个目录")
elif stat.S_ISREG(file_info.st_mode):
    print("这是一个普通文件")

1.5 filecmp —— 文件与目录的比较

filecmp模块用于比较文件和目录的内容。

主要功能

  • filecmp.cmp(file1, file2): 比较两个文件是否相同。
  • filecmp.dircmp(dir1, dir2): 比较两个目录的内容。

使用示例

import filecmp

# 比较两个文件
result = filecmp.cmp('file1.txt', 'file2.txt')
print(result)  # True 表示文件相同,False 表示不同

# 比较两个目录
dir_cmp = filecmp.dircmp('dir1', 'dir2')
print(f"共同文件: {dir_cmp.common_files}")
print(f"不同文件: {dir_cmp.diff_files}")

1.6 tempfile —— 临时文件与目录的创建

tempfile模块用于创建临时文件和目录,程序结束后会自动删除这些临时文件。

主要功能

  • tempfile.TemporaryFile(): 创建临时文件。
  • tempfile.NamedTemporaryFile(): 创建命名临时文件。
  • tempfile.TemporaryDirectory(): 创建临时目录。

使用示例

import tempfile

# 创建临时文件
with tempfile.TemporaryFile(mode='w+t') as temp_file:
    temp_file.write("这是一个临时文件")
    temp_file.seek(0)
    print(temp_file.read())

# 创建临时目录
with tempfile.TemporaryDirectory() as temp_dir:
    print(f"临时目录创建在 {temp_dir}")

1.7 glob —— 路径名的模式匹配

glob模块用于匹配文件路径名,支持通配符。

主要功能

  • glob.glob(pathname): 返回匹配指定模式的文件列表。
  • glob.iglob(pathname): 返回匹配指定模式的文件迭代器。

使用示例

import glob

# 匹配当前目录下的所有.txt文件
text_files = glob.glob('*.txt')
print(text_files)

# 递归匹配所有.py文件
python_files = glob.glob('**/*.py', recursive=True)
print(python_files)

1.8 fnmatch —— Unix文件名模式匹配

fnmatch模块用于Unix风格的文件名模式匹配。

主要功能

  • fnmatch.fnmatch(filename, pattern): 检查文件名是否匹配指定模式。
  • fnmatch.filter(names, pattern): 过滤匹配模式的文件名。

使用示例

import fnmatch

# 检查文件名是否匹配模式
print(fnmatch.fnmatch('file1.txt', '*.txt'))  # True

# 过滤匹配模式的文件名
files = ['data1.txt', 'data2.csv', 'notes.txt']
txt_files = fnmatch.filter(files, '*.txt')
print(txt_files)  # ['data1.txt', 'notes.txt']

1.9 linecache —— 文本行的随机访问

linecache模块用于随机访问文本文件的特定行。

主要功能

  • linecache.getline(filename, lineno): 返回指定文件的指定行。
  • linecache.getlines(filename): 返回指定文件的所有行。

使用示例

import linecache

# 获取文件的第三行
line = linecache.getline('example.txt', 3)
print(line)

# 获取文件的所有行
lines = linecache.getlines('example.txt')
for line in lines:
    print(line, end='')

1.10 shutil —— 高级文件操作

shutil模块提供了高级的文件操作功能,如复制、移动、删除、压缩等。

主要功能

  • shutil.copy(src, dst): 复制文件。
  • shutil.move(src, dst): 移动文件或目录。
  • shutil.rmtree(path): 删除目录及其内容。
  • shutil.make_archive(): 创建压缩文件。
  • shutil.unpack_archive(): 解压文件。

使用示例

import shutil

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

# 移动文件
shutil.move('source.txt', 'new_folder/destination.txt')

# 删除目录
shutil.rmtree('unnecessary_directory')

# 创建压缩文件
shutil.make_archive('archive_name', 'zip', 'folder_to_compress')

# 解压文件
shutil.unpack_archive('archive_name.zip', 'destination_folder')

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

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

相关文章

从家谱的层级结构 - 组合模式(Composite Pattern)

组合模式(Composite Pattern) 组合模式(Composite Pattern)组合模式概述组合模式涉及的角色talk is cheap, show you my code总结 组合模式(Composite Pattern) 组合模式(Composite…

路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度

何在路由器上设置代理服务器? 如何在路由器上设置代理服务器? 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择,特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤,使用路由器…

免费干净!付费软件的平替款!

今天给大家介绍一个非常好用的电脑录屏软件,完全没有广告界面,非常的干净简洁。 电脑录屏 无广告的录屏软件 这个软件不需要安装,打开就能看到界面直接使用了。 软件可以全屏录制,也可以自定义尺寸进行录制。 录制的声音选择也非…

Pandas03

Pandas01 Pandas02 文章目录 内容回顾1 排序和统计函数2 缺失值处理2.1 认识缺失值2.2 缺失值处理- 删除2.3 缺失值处理- 填充非时序数据时序数据 3 Pandas数据类型3.1 数值类型和字符串类型之间的转换3.2 日期时间类型3.3 日期时间索引 4 分组聚合4.1 分组聚合的API使用4.2 分…

vue3使用element-plus,解决 el-table 多选框,选中后翻页再回来选中失效问题

问题&#xff1a;勾选的数据分页再回来回消失 1.在el-table中加 :row-key"getRowKey" const getRowKey (row) > { return row.id; // id必须是唯一的 }; 2.给type为selection的el-table-column添加上reserve-selection属性 <el-tableref"multipleTab…

BUU BRUTE 1

BUU BRUTE 1 启动靶机 让我们输入账户和密码&#xff0c;这里我们什么也不知道就随便输入一个试试 账户adimin密码1234 告诉我们密码错误&#xff0c;为四位数字&#xff0c;在这里没有说账号错误&#xff0c;说明账号就是admin 密码的话爆破一下从0000到9999 这里选择默认的…

Maple软件的安装和使用

文章目录 1.前言说明2.我为什么要学习Maple3.软件的安装4.如何使用4.1基本的赋值语句4.2函数的定义4.3三个类型的书写介质 5.指数运算5.1使用面板5.2自己输入 6.对数的使用 1.前言说明 众所周知&#xff0c;我虽然是一名这个计算机专业的学生&#xff0c;但是我对于数学&#…

vue之axios基本使用

文章目录 1. axios 网络请求库2. axiosvue 1. axios 网络请求库 <body> <input type"button" value"get请求" class"get"> <input type"button" value"post请求" class"post"> <!-- 官网提供…

javaEE-多线程案例-单例模式

目录 啥是设计模式? 一.饿汉式 实现步骤&#xff1a; 二.懒汉式 实现步骤: 三、懒汉式优化1 四.懒汉式优化2 五.懒汉式优化3 总代码: 单例模式是一种设计模式。 啥是设计模式? 设计模式好⽐象棋中的"棋谱".红⽅当头炮,⿊⽅⻢来跳.针对红⽅的⼀些⾛法,⿊…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

鸿蒙开发实战之“使用HiLog和HiSysEvent进行日志与系统事件管理”

HiLog和HiSysEvent作为鸿蒙&#xff08;HarmonyOS&#xff09;系统中进行日志记录和系统事件管理的关键组件&#xff0c;为开发者提供了强大的工具来追踪系统行为、调试应用以及监控设备状态。它们不仅简化了日志管理和事件追踪的流程&#xff0c;还提高了开发效率和系统可维护…

机器学习之PCA降维

主成分分析&#xff08;PCA&#xff0c;Principal Component Analysis&#xff09; 主成分分析&#xff08;PCA&#xff09;是一种常见的无监督学习技术&#xff0c;广泛应用于数据降维、数据可视化以及特征提取等任务。PCA的目标是通过线性变换将数据从高维空间映射到低维空间…

【CSS in Depth 2 精译_098】17.3:CSS 动画延迟技术与填充模式设置 + 17.4:通过 CSS 动画传递意图的秘诀

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 17 章 动画】 ✔️ 17.1 关键帧17.2 3D 变换下的动画设置 17.2.1 添加动画前页面布局的构建17.2.2 为布局添加动画 17.3 动画延迟与填充模式 ✔️17.4 通过动画传递意图…

python+PyMuPDF库:(一)创建pdf文件及内容读取和写入

目录 文档操作 打开文档 获取文档信息 删除页 复制页 移动页 选择重构合并 保存关闭 页对象操作 内容读取 获取页对象的字体样式 插入文本标签 插入文本内容 字体设置 insert_text添加文本 insert_textbox添加文本 插入图片 获取页面注释、链接、表单字段 …

Datawhale AI冬令营 动手学AI Agent

背景——什么是Agent 在人工智能领域&#xff0c;agent可以指一个能够感知环境并作出决策以实现特定目标的系统。比如&#xff0c;一个聊天机器人&#xff08;chatbot&#xff09;就是一个agent&#xff0c;它能够理解用户的输入并给出相应的回复。 学习目标 学会使用百宝箱…

高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用

面向信号处理的特征保持平滑技术 在数据分析领域&#xff0c;信号处理中的噪声问题始终是一个重要议题。无论是实验数据、金融时间序列还是其他形式的信号处理&#xff0c;噪声都会干扰目标模式和趋势的识别。尽管存在多种降噪方法&#xff0c;但在处理短时信号时&#xff0c;…

九点标定+旋转标定

眼在手外方式 1.夹取make点位置要求 机械手夹具夹持一个款标定板或者物料露出make点让视觉定位抓取 高度&#xff1a;与产品识别高度一致 左右位置&#xff1a;在相机视野内可以拍到make点 2.机械手走9个点移动位置要求&#xff08;九点标定&#xff09; 保证make在视野内…

RealityCapture导入视频序列失败

问题原因&#xff1a;如果导入的视频文件存在多余的元数据&#xff0c;那么在这里会发生导入失败。 以本人华为手机拍摄的一段.mp4视频为例&#xff1a; 利用ffmpeg在窗口命令行中检查你的视频—— ffmpeg -i your_video_name.mp4your_video_name是你的视频文件名 如下图所示&…

计算机网络|数据流向剖析与分层模型详解

文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中&#xff0c;数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…

正则表达式(三剑客之awk)

1.awk工具的使用 1.1 截取文档中的某个段 1&#xff09;打印以 : 为分隔的第一个字段 [rootlocalhost ~]# head -n3 /etc/passwd | awk -F : {print $1} 2&#xff09;注意事项 -F&#xff1a;作用是指定分隔符。如果不加分隔符&#xff0c;则以空格或者tab为分隔符 print&…