一文講清Python中文件路徑的基本概念與操作方法
一、文件路徑概述
1. 什么是文件路徑
文件路徑是用于定位文件或文件夾在計(jì)算機(jī)中存儲位置的“地址”,就像現(xiàn)實(shí)生活中的“家庭住址”一樣,通過它操作系統(tǒng)才能找到對應(yīng)的文件。
2. 為什么要學(xué)習(xí)文件路徑
在 Python 中,無論是讀取文件(如 open('data.txt'))、保存數(shù)據(jù),還是導(dǎo)入自定義模塊,都需要通過文件路徑來定位目標(biāo)。路徑寫錯(cuò)會直接導(dǎo)致 FileNotFoundError(文件找不到錯(cuò)誤),因此掌握路徑是 Python 編程的基礎(chǔ)技能。
二、路徑的分類:絕對路徑 vs 相對路徑
1. 絕對路徑
定義:從文件系統(tǒng)的“根目錄”開始,完整描述文件位置的路徑。無論當(dāng)前在哪個(gè)目錄下,絕對路徑都能唯一確定文件位置。
不同系統(tǒng)的絕對路徑格式:
Windows 系統(tǒng):以盤符開頭(如 C:、D:),用反斜杠 \ 分隔目錄(Python 中也可以用正斜杠 / 避免轉(zhuǎn)義問題)。
示例:C:\Users\張三\Desktop\project\data.txt 或 C:/Users/張三/Desktop/project/data.txt
Linux / macOS 系統(tǒng):以正斜杠 /(根目錄)開頭,用正斜杠 / 分隔目錄。
示例:/Users/張三/Desktop/project/data.txt
2. 相對路徑
定義:相對于當(dāng)前工作目錄(Current Working Directory, CWD)的路徑。簡單說,就是“以當(dāng)前位置為起點(diǎn),去找目標(biāo)文件”。
相對路徑的核心符號:
| 符號 | 含義 | 說明 |
| . | 當(dāng)前目錄 | 可省略(如 ./data.txt 等價(jià)于 data.txt) |
| .. | 上一級目錄 | 表示回到當(dāng)前目錄的父目錄 |
| / | 路徑分隔符 | Windows 用 \ 或 /,Linux/macOS 用 / |
常見相對路徑寫法示例:
假設(shè)當(dāng)前工作目錄是 project,目錄結(jié)構(gòu)如下:
C:\Users\張三\Desktop\
└── project/ # 當(dāng)前工作目錄(CWD)
├── code/
│ └── script.py
├── data.txt # 目標(biāo)文件1
└── docs/
└── note.txt # 目標(biāo)文件2
└── photo.jpg # 目標(biāo)文件3(上上級目錄)
| 場景 | 相對路徑寫法 | 說明 |
| 引用當(dāng)前目錄的 data.txt | data.txt 或 ./data.txt | 直接寫文件名(或加 ./) |
| 引用 code 目錄下的 script.py | code/script.py | 進(jìn)入子目錄 code,再找文件 |
| 引用上一級目錄的 photo.jpg | ../photo.jpg | 先回到 Desktop(上一級),再找文件 |
| 引用上上級目錄(假設(shè)CWD是 code) | ../../photo.jpg | 從 code → project → Desktop,再找文件 |
如下示例,data與01腳本文件(文件名盡量不要數(shù)字開頭)同級別,在01腳本文件中引用同級data中的1.txt方式如下:

三、Python 中處理文件路徑的常用方法
使用Pycharm軟件進(jìn)行路徑查看:
右擊文件點(diǎn)擊CopyPath

點(diǎn)擊后可查看文件的絕對路徑和 項(xiàng)目根相對路徑(相對于項(xiàng)目文件夾)

Python 提供了兩種主流方式處理路徑:傳統(tǒng)的 os.path 模塊和現(xiàn)代的 pathlib 模塊(推薦新手優(yōu)先學(xué) pathlib,更簡潔直觀)。
1. 方法一:os.path模塊(傳統(tǒng)方法)
os 是 Python 內(nèi)置的系統(tǒng)交互模塊,os.path 專門用于處理路徑。
常用函數(shù):
| 函數(shù) | 功能說明 | 示例 |
| os.getcwd() | 獲取當(dāng)前工作目錄的絕對路徑 | print(os.getcwd()) → C:\project |
| os.path.join() | 智能拼接路徑(自動(dòng)適配系統(tǒng)分隔符) | os.path.join('code', 'script.py') → code/script.py |
| os.path.abspath() | 將相對路徑轉(zhuǎn)換為絕對路徑 | os.path.abspath('data.txt') → C:\project\data.txt |
| os.path.exists() | 判斷路徑是否存在(文件或文件夾都可) | os.path.exists('data.txt') → True/False |
| os.path.isfile() | 判斷是否為文件 | os.path.isfile('data.txt') → True |
| os.path.isdir() | 判斷是否為文件夾 | os.path.isdir('code') → True |
代碼示例(帶詳細(xì)注釋):
import os # 導(dǎo)入 os 模塊
# 1. 獲取當(dāng)前工作目錄
current_dir = os.getcwd()
print("當(dāng)前工作目錄:", current_dir) # 輸出類似: C:\Users\張三\Desktop\project
# 2. 拼接路徑(推薦用這個(gè),避免手動(dòng)寫分隔符出錯(cuò))
# 比如要拼接 "code" 和 "script.py"
script_path = os.path.join(current_dir, "code", "script.py")
print("拼接后的路徑:", script_path) # 輸出: C:\Users\張三\Desktop\project\code\script.py
# 3. 判斷文件是否存在
if os.path.exists(script_path):
print("文件存在!")
else:
print("文件不存在!")2. 方法二:pathlib模塊(現(xiàn)代推薦,面向?qū)ο螅蓪W(xué)完面向?qū)ο蠛笤龠M(jìn)行回顧)
pathlib 是 Python 3.4+ 新增的模塊,用面向?qū)ο?/strong>的方式處理路徑,代碼更優(yōu)雅,是目前官方推薦的方式。
核心類:Path
| 方法/屬性 | 功能說明 | 示例 |
| Path.cwd() | 獲取當(dāng)前工作目錄(等價(jià)于 os.getcwd()) | Path.cwd() → C:\project |
| Path.joinpath() | 拼接路徑(也可以用 / 運(yùn)算符) | Path('code') / 'script.py' → code/script.py |
| Path.resolve() | 轉(zhuǎn)換為絕對路徑(等價(jià)于 os.path.abspath()) | Path('data.txt').resolve() → C:\project\data.txt |
| Path.exists() | 判斷路徑是否存在 | Path('data.txt').exists() → True |
| Path.is_file() | 判斷是否為文件 | Path('data.txt').is_file() → True |
| Path.is_dir() | 判斷是否為文件夾 | Path('code').is_dir() → True |
| Path.parent | 獲取上一級目錄(等價(jià)于 ..) | Path('code/script.py').parent → code |
代碼示例(帶詳細(xì)注釋):
from pathlib import Path # 從 pathlib 導(dǎo)入 Path 類
# 1. 獲取當(dāng)前工作目錄
current_dir = Path.cwd()
print("當(dāng)前工作目錄:", current_dir) # 輸出類似: C:\Users\張三\Desktop\project
# 2. 拼接路徑(推薦用 / 運(yùn)算符,超簡潔?。?
# 方式一:用 joinpath()
script_path = current_dir.joinpath("code", "script.py")
# 方式二:用 / (更推薦,像寫路徑一樣自然)
script_path = current_dir / "code" / "script.py"
print("拼接后的路徑:", script_path) # 輸出: C:\Users\張三\Desktop\project\code\script.py
# 3. 判斷文件是否存在
if script_path.exists():
print("文件存在!")
else:
print("文件不存在!")
# 4. 獲取上一級目錄
parent_dir = current_dir.parent # 等價(jià)于 ../
print("上一級目錄:", parent_dir) # 輸出: C:\Users\張三\Desktop四、新手常見問題與注意事項(xiàng)
1. 路徑分隔符的“坑”
Windows 默認(rèn)用反斜杠 \,但在 Python 字符串中 \ 是轉(zhuǎn)義字符(比如 \n 是換行),直接寫會報(bào)錯(cuò)!
錯(cuò)誤寫法:open("C:\Users\data.txt")(\U 會被當(dāng)成轉(zhuǎn)義符)
正確寫法:
- 用正斜杠
/:open("C:/Users/data.txt")(推薦,跨系統(tǒng)兼容) - 用雙反斜杠
\\:open("C:\\Users\\data.txt") - 用原始字符串
r"":open(r"C:\Users\data.txt")(加r表示不轉(zhuǎn)義)
2. 相對路徑的“基準(zhǔn)”:當(dāng)前工作目錄(CWD)
相對路徑是相對于“當(dāng)前工作目錄”,而不是“腳本所在目錄”!
比如你在 Desktop 目錄下運(yùn)行 project/code/script.py,此時(shí) CWD 是 Desktop,不是 code。
如何獲取“腳本所在目錄”的絕對路徑?
如果希望路徑相對于腳本本身(無論在哪里運(yùn)行都能找到文件),可以用以下方法:
1.用 pathlib(推薦):
from pathlib import Path
# 獲取當(dāng)前腳本的絕對路徑,再取父目錄(即腳本所在文件夾)
script_dir = Path(__file__).resolve().parent
print("腳本所在目錄:", script_dir)(注:__file__ 是 Python 內(nèi)置變量,表示當(dāng)前腳本的文件名)
2.用 os.path:
import os
script_dir = os.path.dirname(os.path.abspath(__file__))
print("腳本所在目錄:", script_dir)3. 文件名和路徑中不要有中文?
不是不能有,但建議新手盡量用英文命名文件和文件夾,避免部分系統(tǒng)或舊版本 Python 出現(xiàn)編碼問題。
五、總結(jié)
- 絕對路徑:完整地址,從根目錄開始,適合固定位置的文件;
- 相對路徑:以當(dāng)前目錄為起點(diǎn),用
.(當(dāng)前)、..(上一級),適合項(xiàng)目內(nèi)文件; - Python 處理路徑:優(yōu)先用
pathlib(面向?qū)ο?,簡潔),也可以?os.path(傳統(tǒng)); - 避坑要點(diǎn):注意分隔符轉(zhuǎn)義、明確當(dāng)前工作目錄、盡量用英文命名。
到此這篇關(guān)于一文講清Python中文件路徑的基本概念與操作方法的文章就介紹到這了,更多相關(guān)Python文件路徑操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文了解Python并發(fā)編程的工程實(shí)現(xiàn)方法
這篇文章主要介紹了Python并發(fā)編程的工程實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
python dataframe astype 字段類型轉(zhuǎn)換方法
下面小編就為大家分享一篇python dataframe astype 字段類型轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python實(shí)現(xiàn)連點(diǎn)器的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)連點(diǎn)器,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
Python hashlib庫數(shù)據(jù)安全加密必備指南
這篇文章主要為大家介紹了Python hashlib庫數(shù)據(jù)安全加密的使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
django-利用session機(jī)制實(shí)現(xiàn)唯一登錄的例子
這篇文章主要介紹了django-利用session機(jī)制實(shí)現(xiàn)唯一登錄的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
在Python中使用SQLite數(shù)據(jù)庫進(jìn)行增刪改查操作的代碼示例
SQLite 是 Python 內(nèi)置支持的輕量級嵌入式數(shù)據(jù)庫,無需安裝額外服務(wù)端,僅通過文件(或內(nèi)存)存儲數(shù)據(jù),非常適合小型項(xiàng)目、測試場景或本地?cái)?shù)據(jù)管理,以下是完整的增刪改查(CRUD)操作教程,包含核心語法、示例代碼和最佳實(shí)踐,需要的朋友可以參考下2025-11-11
Python自定義類的數(shù)組排序?qū)崿F(xiàn)代碼
這篇文章主要介紹了Python自定義類的數(shù)組排序?qū)崿F(xiàn)代碼,需要的朋友可以參考下2016-08-08

