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

使用python操作文件夹

一、操作文件路径

1.获取当前路径

os.getcwd ():获取当前工作目录​

当前工作目录是程序执行时默认的文件操作基准目录。使用os.getcwd()函数可以返回当前工作目录的字符串路径。

import os​
current_dir = os.getcwd()​
print("当前工作目录:", current_dir)

2.创建文件夹 

在 Python 的 os 库中,mkdir和makedirs是用于创建目录的两个重要函数。虽然它们的核心功能都是创建目录,但在使用场景和行为特性上存在明显差异。

os.mkdir函数的主要功能是创建单个目录。

os.mkdir 的使用示例:        

import os​
# 示例1:创建单个目录(父目录存在)​
try:​# 假设当前工作目录下已存在"projects"目录​os.mkdir("projects/new_project")​print("单个目录创建成功")​
except FileExistsError:​print("目录已存在")​
except FileNotFoundError:​print("父目录不存在")​
​# 示例2:创建目录时父目录不存在(会抛出异常)​
try:​# 假设"nonexistent_parent"目录不存在​os.mkdir("nonexistent_parent/subdir")​
except FileNotFoundError:​print("父目录不存在,创建失败")

在示例 1 中,由于 "projects" 目录已存在,os.mkdir成功创建了 "new_project" 子目录;示例 2 中,因为 "nonexistent_parent" 目录不存在,函数抛出FileNotFoundError异常。

os.makedirs函数的主要功能是递归创建多级目录。

 os.makedirs 的使用示例:

import os
# 示例1:创建多级目录(父目录不存在)
try:os.makedirs("data/reports/2024/q1")print("多级目录创建成功")
except FileExistsError:print("目录已存在")
# 示例2:设置exist_ok=True处理目录已存在的情况
try:# 假设"docs/tutorials"目录已存在os.makedirs("docs/tutorials/basics", exist_ok=True)print("目录创建成功或已存在")
except FileExistsError:print("目录已存在(此句不会执行,因exist_ok=True)")

示例 1 中,"data"、"reports"、"2024" 等父目录可能原本不存在,但os.makedirs会自动依次创建这些父目录,最终成功创建 "q1" 目录;示例 2 中,由于设置了exist_ok=True,当 "docs/tutorials" 目录已存在时,函数不会抛出异常,而是直接创建 "basics" 子目录(若不存在)或正常返回(若已存在)。

3.拼接路径:

在处理多层目录时,手动拼接路径容易因操作系统的路径分隔符不同而出现错误。os 库提供了专门的函数来处理路径的拼接与拆分。​

os.path.join (path1, path2, ...):拼接路径

os.path.join()函数能将多个路径组件拼接成一个完整的路径,会根据操作系统自动选择合适的路径分隔符(Windows 用 “\”,Linux/macOS 用 “/”)

示例:

import os
dir_path = "/home/user/data"
file_name = "result.csv"
full_path = os.path.join(dir_path, file_name)
print("拼接后的路径:", full_path)  # 输出:/home/user/data/result.csv

4.跳转路径

在 Python 的 os 库中,os.chdir() 函数是用于切换当前工作目录的重要工具。

os.chdir(path) 函数的作用是将当前工作目录切换到指定的 path 路径。

示例代码:

import os
# 假设当前工作目录是 /home/user/project
print("初始工作目录:", os.getcwd())  # 输出:/home/user/project
# 切换到当前目录下的 "data" 子目录(相对路径)
os.chdir("data")
print("切换到 data 后的工作目录:", os.getcwd())  # 输出:/home/user/project/data
# 切换到上一级目录(相对路径 ../ 表示上一级)
os.chdir("..")
print("切换回上一级后的工作目录:", os.getcwd())  # 输出:/home/user/project
# 切换到上一级目录的 "docs" 子目录
os.chdir("../docs")
print("切换到上级 docs 后的工作目录:", os.getcwd())  # 输出:/home/user/docs

5.判断相对路径和绝对路径

在 Python os 库的路径操作函数中,os.path.isabs(path) 是一个用于判断路径是否为绝对路径的实用工具。

os.path.isabs(path) 函数的核心功能是判断传入的 path 参数是否为绝对路径。它返回一个布尔值:若 path 是绝对路径,则返回 True;若为相对路径,则返回 False。

使用示例:

import os
# 绝对路径(盘符开头)
print(os.path.isabs("C:\\Users\\user\\file.txt"))  # 输出:True
# 绝对路径(UNC路径)
print(os.path.isabs("\\\\server\\shared\\data"))    # 输出:True
# 相对路径(无盘符或UNC前缀)
print(os.path.isabs("data\\report.txt"))            # 输出:False
print(os.path.isabs("..\\docs"))                    # 输出:False

6.获取文件路径和文件名

在 Python os 库的路径处理工具中,os.path.basename(path) 和 os.path.dirname(path) 是一对互补的函数,分别用于从文件路径中提取文件名(或最后一级目录名)和目录路径。无论是解析用户输入的路径、处理文件命名逻辑,还是批量整理文件,这两个函数都能发挥重要作用。

os.path.basename(path) 函数的核心功能是从传入的路径 path 中提取最后一部分内容,通常是文件名(包含扩展名)或最后一级目录的名称,它的返回值是一个字符串。

os.path.dirname(path) 函数则用于提取 path 中除最后一部分外的目录路径,返回值同样是字符串。

当 path 指向具体文件时,basename 提取文件名,dirname 提取文件所在目录的路径,二者组合可完整还原原始路径(忽略尾部分隔符的情况下)。

 示例代码:

import os
# Windows 系统示例
file_path_win = "C:\\Users\\user\\docs\\notes.txt"
print("Windows 文件名:", os.path.basename(file_path_win))  # 输出:notes.txt
print("Windows 目录路径:", os.path.dirname(file_path_win))  # 输出:C:\Users\user\docs

二、操作文件和文件夹 

1.查询文件大小

os.path.getsize (path):获取文件大小

os.path.getsize(path)函数返回指定文件的大小,单位为字节(B)。若路径是目录,该函数的行为在不同操作系统上可能不同,通常不建议用于目录。​

示例代码:

import os
file_path = "images/photo.jpg"
if os.path.isfile(file_path):file_size = os.path.getsize(file_path)print("文件大小:", file_size, "字节")

2.删除文件和文件夹 

os.rmdir (path) :删除目录

os.rmdir(path)函数用于删除空目录,若目录非空则会抛出异常。

示例代码:

import os
# 删除空目录
try:os.rmdir("empty_dir")print("空目录删除成功")
except OSError:print("删除空目录失败,目录可能非空或不存在")
# 递归删除目录
try:os.removedirs("data/temp/empty")print("递归删除目录成功")
except OSError:print("递归删除目录失败")

3.重命名文件或文件夹

 在 Python 的 os 库中,os.rename() 和 os.renames() 是用于重命名文件或目录的两个重要函数。它们不仅能实现简单的名称修改,还能在重命名的同时移动文件或目录,在文件管理和批量处理场景中经常用到。

os.rename (src, dst):重命名或移动文件 / 目录​

os.rename(src, dst) 函数的主要功能是将 src 指向的文件或目录重命名为 dst,也可以实现文件或目录的移动(若 src 和 dst 位于不同目录)。

示例:

import os
# 原目录路径
src_dir = "data/temp"
# 目标目录路径(移动到上级目录并改名)
dst_dir = "data/temporary"
try:os.rename(src_dir, dst_dir)print(f"目录重命名/移动成功:{src_dir} → {dst_dir}")
except OSError as e:print(f"目录操作失败:{e}")

os.renames (old, new):递归重命名或移动文件 / 目录​

os.renames(old, new) 函数可以视为 os.rename() 的增强版,它支持递归创建目标路径中不存在的父目录,从而实现更复杂的移动和重命名操作。

示例 :

import os
# 原目录路径
old_dir = "files/docs"
# 目标路径(父目录 "backup/docs_2024" 不存在)
new_dir = "backup/docs_2024/old_docs"
try:os.renames(old_dir, new_dir)print(f"目录重命名并移动成功:{old_dir} → {new_dir}")
except OSError as e:print(f"操作失败:{e}")

4.复制文件

在 Python 的 os 库中,os.link() 函数是用于创建硬链接的重要工具。硬链接作为文件系统中的一种特殊链接方式,能为文件创建多个入口,方便文件的管理和访问。

5.获取文件夹中的全部文件名

os.link(src, dst) 函数的核心功能是为 src 指向的文件创建一个硬链接,硬链接的路径为 dst。硬链接与原文件共享相同的 inode(文件系统中的索引节点),这意味着它们指向存储介质上的同一数据块,修改其中一个会影响所有关联的硬链接。

示例 :

import os
# 源文件路径(需确保文件存在)
src_file = "data/report.txt"
# 硬链接路径
link_file = "data/report_link.txt"
try:os.link(src_file, link_file)print(f"硬链接创建成功:{src_file} → {link_file}")
except FileNotFoundError:print(f"错误:源文件 {src_file} 不存在")
except PermissionError:print(f"错误:没有权限创建硬链接 {link_file}")
except OSError as e:print(f"创建硬链接失败:{e}")

6.判断文件和文件夹

os.path.exists (path):判断路径是否存在​

os.path.exists(path)函数用于检查指定的路径是否存在,存在则返回 True,否则返回 False。​

示例代码:

import os
path1 = "data"
path2 = "nonexistent_file.txt"
print("path1是否存在:", os.path.exists(path1))  # 若存在data目录则返回True
print("path2是否存在:", os.path.exists(path2))  # 通常返回False

 os.path.isfile (path) 与 os.path.isdir (path):判断是文件还是目录

os.path.isfile(path)函数判断路径是否为一个文件,os.path.isdir(path)函数判断路径是否为一个目录,返回值均为布尔类型。​

示例代码:

import os
file_path = "docs/guide.pdf"
dir_path = "docs"
print("是否为文件:", os.path.isfile(file_path))  # 若存在该文件则返回True
print("是否为目录:", os.path.isdir(dir_path))  # 若存在该目录则返回True

三、执行其他应用程序

在 Python 编程中,除了处理文件和数据,有时还需要调用外部应用程序来完成特定任务,比如打开记事本、运行脚本或执行系统命令等。本文将详细介绍在 Python 中通过命令提示符 / 终端、os.system()方法和os.popen()方法执行其他应用程序的具体方式,帮助你灵活应对不同的外部程序调用场景。

1.命令提示符窗口或终端

  • Windows 系统:打开 “命令提示符”(Win+R 输入cmd回车),输入应用程序的路径或名称即可启动。例如:​
  • 启动记事本:notepad.exe(系统自带程序可直接输入名称,因路径已加入环境变量)​
  • 启动指定路径的程序:"C:\Program Files\Google\Chrome\Application\chrome.exe"(路径含空格需用引号包裹)

2.system()方法

os.system(command)是 Python 中最基础的调用外部程序的方法,它通过操作系统的命令行执行command参数指定的命令,并返回命令的退出状态码(0 表示成功,非 0 表示失败)。

语法与参数

import os
status = os.system(command)

command:字符串类型,需执行的系统命令或应用程序启动指令。​

返回值:整数类型的退出状态码,0 表示执行成功,其他值表示出错(具体含义因命令而异)。

示例 : 

import os
# 启动Windows记事本
os.system("notepad.exe")
# 启动Linux文本编辑器gedit
# os.system("gedit")
# 启动macOS文本编辑器TextEdit
# os.system("open -a TextEdit")

3.popen()方法

os.popen(command, mode='r', buffering=-1)方法不仅能执行外部命令,还能获取命令的输出结果,它返回一个文件对象,通过该对象可以读取程序的输出内容。​

语法与参数

import os
file_obj = os.popen(command, mode='r', buffering=-1)

 示例 :

import os
# 执行查看目录内容的命令并获取结果(Windows用dir,Linux/macOS用ls)
if os.name == "nt":  # 判断是否为Windows系统command = "dir"
else:command = "ls"
# 执行命令并获取输出
with os.popen(command) as f:output = f.read()  # 读取所有输出内容
print("命令执行结果:")
print(output)

 ommand:字符串类型,需执行的命令。

​mode:文件打开模式,'r'表示读取(默认),'w'表示写入。​

buffering:缓冲设置,-1 表示使用默认缓冲。​

返回值:文件对象,可通过read()、readlines()等方法读取输出。

四、压缩和解压文件

1.判断文件是否为zip文件

判断一个文件是否为有效的 ZIP 文件,可通过zipfile.is_zipfile()函数实现。该函数会检查文件的头部信息,判断其是否符合 ZIP 文件格式规范,返回布尔值(True表示是 ZIP 文件,False表示不是)。​

示例代码:

import zipfile
def is_zip_file(file_path):"""判断文件是否为有效的ZIP文件"""try:return zipfile.is_zipfile(file_path)except Exception as e:print(f"判断失败:{e}")return False
# 测试示例
file1 = "data.zip"
file2 = "document.txt"
print(f"{file1} 是ZIP文件:{is_zip_file(file1)}")  # 若为有效ZIP,输出True
print(f"{file2} 是ZIP文件:{is_zip_file(file2)}")  # 输出False

2.打开压缩文件

使用zipfile.ZipFile类可打开一个 ZIP 文件,通过指定不同的模式(如读取、写入、追加)实现对 ZIP 文件的操作。常见模式包括:​

'r':只读模式(默认),打开已存在的 ZIP 文件。​

'w':写入模式,创建新的 ZIP 文件(若文件已存在则覆盖)。​

'a':追加模式,向已存在的 ZIP 文件添加新文件。

示例代码:

import zipfile
# 打开已存在的ZIP文件(只读模式)
zip_path = "archive.zip"
try:with zipfile.ZipFile(zip_path, 'r') as zf:print(f"成功打开ZIP文件:{zip_path}")# 后续操作(如查看文件列表)print("ZIP内包含文件:", zf.namelist())
except FileNotFoundError:print(f"错误:{zip_path} 不存在")
except zipfile.BadZipFile:print(f"错误:{zip_path} 不是有效的ZIP文件")

3.解压文件

extract()(解压单个文件)

示例:

import zipfile
import os
zip_path = "archive.zip"
target_dir = "extracted_single"  # 解压目标目录
# 创建目标目录(若不存在)
os.makedirs(target_dir, exist_ok=True)
with zipfile.ZipFile(zip_path, 'r') as zf:# 解压指定文件(如"doc/report.txt")file_to_extract = "doc/report.txt"if file_to_extract in zf.namelist():zf.extract(file_to_extract, path=target_dir)print(f"已解压 {file_to_extract} 到 {target_dir}")else:print(f"ZIP文件中不存在 {file_to_extract}")

4.压缩文件

使用'w'或'a'模式打开ZipFile对象后,可通过write()方法向 ZIP 文件添加文件。​

示例代码:

import zipfile
import os
# 创建新的ZIP文件并添加文件(写入模式)
output_zip = "new_archive.zip"
files_to_compress = ["file1.txt","data/results.csv","images/pic.jpg"
]
with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zf:for file in files_to_compress:if os.path.exists(file):# 写入文件,第二个参数可指定在ZIP中的路径zf.write(file, arcname=os.path.basename(file))  # 仅保留文件名,不包含原目录结构print(f"已添加 {file} 到 {output_zip}")else:print(f"警告:{file} 不存在,跳过")

5.获取zip文件中文件的属性信息

infolist()方法属于zipfile.ZipFile类,调用该方法会返回一个ZipInfo对象的列表,其中每个ZipInfo对象对应 ZIP 文件中的一个文件或目录,包含了该文件的详细属性信息,如文件名、大小、修改时间、压缩率等。

示例:

import zipfile
import datetime
# 打开ZIP文件
zip_path = "archive.zip"
with zipfile.ZipFile(zip_path, 'r') as zf:# 获取所有文件的信息列表file_info_list = zf.infolist()# 遍历信息列表并输出属性for info in file_info_list:print(f"\n文件名称:{info.filename}")print(f"原始大小:{info.file_size} 字节")print(f"压缩大小:{info.compress_size} 字节")print(f"压缩率:{1 - info.compress_size / info.file_size:.2%}")# 转换修改时间(元组转datetime)modify_time = datetime.datetime(*info.date_time)print(f"修改时间:{modify_time.strftime('%Y-%m-%d %H:%M:%S')}")print(f"是否为目录:{info.is_dir()}")

http://www.xdnf.cn/news/15308.html

相关文章:

  • Hashtable 与 HashMap 的区别笔记
  • [GWCTF 2019]我有一个数据库
  • 05.判断日期是工作日还是周末
  • 改进广告投入与销售额预测分析
  • JavaSE-多态
  • 从架构到代码:飞算JavaAI电商订单管理系统技术解构
  • [CH582M入门第六步]软件IIC驱动AHT10
  • 算法题(174):全排列问题
  • 归并排序递归法和非递归法的简单简单介绍
  • 运放压摆率?正弦波怎么输出了三角波?
  • 数据结构 单链表(2)--单链表的实现
  • 打破并发瓶颈:虚拟线程实现详解与传统线程模型的性能对比
  • 二叉树算法详解和C++代码示例
  • C++封装、多态、继承
  • RFCOMM协议详解:串口仿真与TCP/IP协议栈移植技术——面试高频考点与真题解析
  • 在Intel Mac的PyCharm中设置‘add bin folder to the path‘的解决方案
  • 【Scratch】从入门到放弃(六):指令大全-扩展类
  • iOS高级开发工程师面试——关于优化
  • 在AI应用中Prompt撰写重要却难掌握,‘理解模型与行业知识是关键’:提升迫在眉睫
  • 关于数据库的慢查询
  • C/C++数据结构之多维数组
  • MyBatis04-MyBatis小技巧
  • QT 多线程 管理串口
  • Node.js特训专栏-实战进阶:16. RBAC权限模型设计
  • 沃尔玛 卡号查询 滑块 分析
  • 深度学习图像分类数据集—角膜溃疡识别分类
  • TensorFlow深度学习实战(24)——变分自编码器详解与实现
  • spring-ai-alibaba 1.0.0.2 学习(十六)——多模态
  • IP 地址与网络基础全面解析
  • ARC 02 runner scale set chart:对接集群与 Github Action 服务器