Python文件与目录操作指南

Python文件与目录操作指南

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

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

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

主要功能

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

使用示例

python 复制代码
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): 获取文件扩展名。

使用示例

python 复制代码
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(): 返回当前处理的文件名。

使用示例

python 复制代码
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): 获取符号链接本身的状态信息。

使用示例

python 复制代码
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): 比较两个目录的内容。

使用示例

python 复制代码
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(): 创建临时目录。

使用示例

python 复制代码
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): 返回匹配指定模式的文件迭代器。

使用示例

python 复制代码
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): 过滤匹配模式的文件名。

使用示例

python 复制代码
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): 返回指定文件的所有行。

使用示例

python 复制代码
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(): 解压文件。

使用示例

python 复制代码
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')
相关推荐
lzhdim4 分钟前
XML工具类 - C#小函数类推荐
xml·开发语言·windows·c#
疯狂学习GIS6 分钟前
基于高德地图API在Python中实现地图功能的方法
python·gis·学术工作效率
GISer_Jing20 分钟前
Javascript数据结构——图Graph
开发语言·javascript·数据结构
atwdy28 分钟前
【python】unittest单元测试
python·单元测试·unittest
꧁坚持很酷꧂31 分钟前
Qt天气预报系统设计界面布局第四部分左边
开发语言·qt
很楠不爱42 分钟前
Qt——系统相关
开发语言·qt
张敬之、1 小时前
Ribbon源码分析
java·开发语言
十月雨眠1 小时前
使用three.js 实现vr全景图展示,复制即可用
开发语言·javascript
天桥下的卖艺者1 小时前
R语言6种将字符转成数字的方法,写在新年来临之际
开发语言·r语言
lovelin+v175030409662 小时前
电商数据API接口的稳定性保障与性能优化策略
大数据·人工智能·爬虫·python·数据分析