在文件读取时,有很多地方都会用到绝对路径与相对路径。如在需要文件作为输入、指定文件作为输出,还有一些中间文件,都会用到相对路径与绝对路径。
绝对路径
绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。完整的描述文件位置的路径就是绝对路径。
1、Linux下的绝对路径
绝对路径指的是从根目录 /
开始的完整路径。例如,/home/user/file.txt
就是一个绝对路径,表示根目录下的 home
目录下的 user
目录下的 file.txt
文件。
2、Windows下的绝对路径
绝对路径指的是从根目录开始的完整路径。在 Windows 操作系统中,根目录的路径为 C:\
(或其他盘符),因此绝对路径以盘符和冒号开始。例如,C:\Users\user\Desktop\file.txt
就是一个绝对路径,表示 C
盘下的 Users
目录下的 user
目录下的 Desktop
目录下的 file.txt
文件。
相对路径
相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
1、Linux下的相对路径
相对路径指的是相对于当前工作目录的路径。例如,如果当前工作目录为 /home/user
,则 file.txt
就是一个相对路径,表示当前工作目录下的 file.txt
文件。另外,..
表示上一级目录,.
表示当前目录。例如,如果当前工作目录为 /home/user
,则 ../file.txt
表示当前目录的上一级目录下的 file.txt
文件,./file.txt
表示当前目录下的 file.txt
文件。
2、Windows下的相对路径
相对路径指的是相对于当前工作目录的路径。例如,如果当前工作目录为 C:\Users\user\Desktop
,则 file.txt
就是一个相对路径,表示当前工作目录下的 file.txt
文件。另外,..
表示上一级目录,.
表示当前目录。例如,如果当前工作目录为 C:\Users\user\Desktop
,则 ..\Documents\file.txt
表示当前目录的上一级目录下的 Documents
目录下的 file.txt
文件,.\file.txt
表示当前目录下的 file.txt
文件。
需要注意的是,相对路径和绝对路径的使用场景不同。绝对路径通常用于访问文件系统中的固定位置的文件或目录,可以确保路径的唯一性。相对路径通常用于访问当前工作目录下的文件或目录,可以简化路径表示,提高效率。在使用相对路径时需要注意当前工作目录的位置,以避免路径错误。
Python如何处理绝对路径和相对路径
Python 可以处理两个系统下的绝对路径和相对路径,因为 Python 的文件操作函数支持跨平台使用。
在 Python 中,可以使用 os
模块来处理文件路径。其中,os.path.abspath()
函数可以将相对路径转换为绝对路径,os.path.relpath()
函数可以将绝对路径转换为相对路径。例如:
import os
# 获取当前工作目录
cwd = os.getcwd()
# 将相对路径转换为绝对路径
abs_path = os.path.abspath('file.txt')
# 将绝对路径转换为相对路径
rel_path = os.path.relpath('C:\\Users\\user\\file.txt', cwd)
print(abs_path) # 输出: /home/user/file.txt 或 C:\Users\user\file.txt
print(rel_path) # 输出: file.txt
需要注意的是,Windows 操作系统中的路径分隔符为反斜杠 \
,而 Unix/Linux/MacOS 操作系统中的路径分隔符为正斜杠 /
。在 Python 中,可以使用 os.path.join()
函数来拼接路径,该函数会自动根据操作系统选择正确的路径分隔符。例如:
import os
# 拼接路径
path = os.path.join('C:', 'Users', 'user', 'file.txt')
print(path) # 输出: C:\Users\user\file.txt 或 C:/Users/user/file.txt
需要注意的是,当使用相对路径时,应该将相对路径与当前工作目录拼接起来,以确保路径正确。可以使用 os.path.dirname()
函数获取当前文件的父目录,然后再与相对路径拼接。例如:
import os
# 获取当前文件的父目录
parent_dir = os.path.dirname(__file__)
# 拼接相对路径
rel_path = os.path.join('data', 'file.txt')
# 拼接绝对路径
abs_path = os.path.join(parent_dir, rel_path)
print(abs_path) # 输出: /home/user/project/data/file.txt 或 C:\Users\user\project\data\file.txt
需要注意的是,在使用文件系统相关的操作时,应该考虑不同操作系统之间的差异,以确保代码的可移植性。
注意:确保代码的可移植性,我们就不能把特定的系统的路径格式写死(例如:linux是使用/
,Windows是使用\
),应该使用os.path
进行路径获取,路径的拼接。