目录:
什么是文件路径? 在Python中如何书写文件路径? 实际应用场景
在Python编程中,正确处理文件路径是非常关键的,无论是读取配置文件、保存用户数据还是执行脚本,都需要使用到文件路径。
什么是文件路径?
一个文件有两个关键属性:文件名 和 路径。文件名是我们给文件起的名字,而路径则是指明这个文件在计算机上的具体位置。
文件路径是用来定位计算机文件系统中的特定文件或目录的一种方式。它描述了从根目录(或当前工作目录)到目标文件的一系列目录名称。
文件路径可以分为两种主要类型:
绝对路径:从根目录开始,指向文件或目录的完整路径。 相对路径:相对于当前工作目录的路径。
例如,在Windows系统上,D:\Documents\shanhai_moyuren.txt
是一个绝对路径,而 ..\sister_folder\shanhai_moyuren.png
则是一个相对路径,表示从当前目录向上一级再进入sister_folder
找到shanhai_moyuren.png
。
在Python中如何书写文件路径?
为了确保你的代码能够在不同操作系统上正确运行,Python提供了多种方法来创建和操作文件路径。
1、使用原始字符串
如果你的路径包含反斜杠,通常需要使用双反斜杠进行转义(C:\\shanhai\\moyuren\\shanhai_moyuren.txt
)。为了避免这种情况,可以使用原始字符串(在字符串前加r
)。
path = r'C:\shanhai\moyuren\shanhai_moyuren.txt'
print(path) # 输出: C:\shanhai\moyuren\shanhai_moyuren.txt
2、使用正斜杠
即便是在Windows上,Python也能识别正斜杠作为路径分隔符。
path = 'C:/shanhai/moyuren/shanhai_moyuren.txt'
print(path) # 输出: C:/shanhai/moyuren/shanhai_moyuren.txt
3、os.path 模块
使用os.path.join()
函数可以帮助你构建跨平台兼容的路径。
import os
base_path = 'C:\\shanhai\\moyuren'
filename = 'shanhai_moyuren.txt'
full_path = os.path.join(base_path, filename)
print(full_path) # 输出: C:\shanhai\moyuren\shanhai_moyuren.txt
os.path
还提供了其他有用的函数,如os.path.abspath()
获取绝对路径,os.path.dirname()
获取目录名等。
4、pathlib 模块 (Python 3.4+ 新增)
pathlib
提供了一个面向对象的方法来处理文件路径,更加直观易用。
from pathlib import Path
base_path = Path('C:/shanhai/moyuren')
file_path = base_path / 'shanhai_moyuren.txt'
print(file_path) # 输出: C:\shanhai\moyuren\shanhai_moyuren.txt
实际应用场景
假设你正在开发一个程序,用于管理和备份“山海摸鱼人”的相关文档。这个程序需要定期检查并备份指定文件夹中的所有.txt
和.docx
文件到另一个位置。这里我们可以使用Python来实现这个功能。
示例脚本:文档备份工具
import os
from shutil import copy2
from datetime import datetime
# 定义源文件夹和目标文件夹
source_dir = r'C:\shanhai\moyuren' # 注意这里使用了原始字符串
backup_dir = r'D:\Backup'
# 确保目标文件夹存在
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
# 获取所有相关的文档文件
files = [f for f in os.listdir(source_dir) if f.endswith('.docx') or f.endswith('.txt')]
# 备份每个文件
for file in files:
source_file_path = os.path.join(source_dir, file)
target_file_path = os.path.join(backup_dir, file)
# 如果目标文件已存在,则添加时间戳防止覆盖
if os.path.exists(target_file_path):
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
new_filename = f"{file}_{timestamp}"
target_file_path = os.path.join(backup_dir, new_filename)
copy2(source_file_path, target_file_path)
print(f"Backed up {file} to {target_file_path}")
在这个脚本中,我们定义了两个变量source_dir
和backup_dir
,分别代表源文件夹和备份文件夹。然后,我们遍历源文件夹中的所有文件,并检查是否为.txt
或.docx
文件。对于每一个符合条件的文件,我们将其复制到备份文件夹中。如果目标文件已经存在,我们会给新文件加上时间戳(如_20241018152523
)以避免覆盖。