python 文件操作全知道 | python 小知识
python 文件操作全知道 | python 小知识
在Python中,处理文件和目录是一项基础且重要的任务。本文将带你了解几个常用的文件和目录处理模块:pathlib
、os.path
、shutil
和os.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中处理文件和目录的基本方法。pathlib
、os.path
、shutil
和os.walk
是处理文件和目录的常用模块和函数,它们提供了丰富的功能来满足不同的需求。在实际开发中,你可以根据具体的应用场景选择合适的模块和函数来操作文件和目录。
希望这篇博客对你理解Python文件目录访问有所帮助!如果你有任何问题或建议,请随时在评论区留言。