windows路徑使用的是\,linux路徑使用的是/。
特別的,在windows系統中如果有這樣的一個路徑 D:\nxxx\txxx\x1
,程序會報錯。因爲在路徑中存在特殊符 \n
(換行符)和\t
(製表符),Python解釋器無法自動區分。
所以,在windows中編寫路徑時,一般有兩種方式:
-
加轉義符,例如:
"D:\\nxxx\\txxx\\x1"
-
路徑前加r,例如:
r"D:\nxxx\txxx\x1"
程序當前路徑
項目中如果使用了相對路徑,那麼一定要注意當前所在的位置。
例如:在/Users/wupeiqi/PycharmProjects/CodeRepository/
路徑下編寫 demo.py
文件
with open("a1.txt", mode='w', encoding='utf-8') as f: f.write("你好呀")
用以下兩種方式去運行:
-
方式1,文件會創建在
/Users/wupeiqi/PycharmProjects/CodeRepository/
目錄下。cd /Users/wupeiqi/PycharmProjects/CodeRepository/ python demo.py
cd /Users/wupeiqi python /Users/wupeiqi/PycharmProjects/CodeRepository/demo.py
import shutil import os # 1. 獲取當前腳本絕對路徑 path_1 = os.path.abspath(__file__) print(path_1) # D:\python_DM\筆記\路徑.py # 2. 獲取當前腳本的上一級 獲取上上級目錄 base_path = os.path.dirname(path_1) print(base_path) # D:\python_DM\筆記 base_path_base = os.path.dirname(base_path) print(base_path_base) # D:\python_DM # 3. 路徑拼接 join(base, p1, p2, p3,........) p1 = os.path.join(base_path, "多線程和多進程", "threading_event.py") print(p1) p2 = os.path.join(base_path, "haha") print(p2) # 4. 判斷路徑是否存在 exists1 = os.path.exists(p1) exists2 = os.path.exists(p2) print(exists1) print(exists2) # 5. 創建文件夾 os.makedirs(路徑) 會遞歸創建文件夾,不會創建文件 path = os.path.join(base_path, "nihao", "haha", "txt.txt") if not os.path.exists(path): os.makedirs(path) # 創建的txt.txt是一個文件夾,並不是一個文件 # 6. 判斷是否是文件夾 判斷依據:根據路徑去尋找文件夾是否存在,如果存在,再去判斷是不是文件夾,否則直接False # 判斷是否是文件:os.path.isfile(路徑) 判斷依據與判斷文件相同 path = os.path.join(base_path, "nihao", "haha", "txt.txt") is_dir = os.path.isdir(path) print(is_dir) path = os.path.join(base_path, "nihao", "haha", "txtx.txt") is_dir = os.path.isdir(path) print(is_dir) # 7. 刪除文件或文件夾 path = os.path.join(base_path, "nihao", "haha", "txtx.txt") if os.path.exists(path): os.remove(path) # 只能刪除文件,如果文件不存在則會報錯 path = os.path.join(base_path, "nihao") if os.path.exists(path): shutil.rmtree(path) # 刪除文件夾,可以刪除所有子目錄和目錄下的文件,如果文件夾不存在則會報錯 # 8. 拷貝文件夾 只能拷貝文件,如果文件存在,則會報錯,如果新路徑不存在,則會創建 path = os.path.join(base_path, "多線程和多進程") path1 = os.path.join(base_path, "Socket通信1") # 拷貝後的文件名爲"Socket通信1" shutil.copytree(path, path1) path1 = os.path.join(base_path, "Socket通信", "nihao123", "haha") # 拷貝後的文件名爲"nihao" shutil.copytree(path, path1) # 9.拷貝文件 如果拷貝文件時,文件夾不存在,則會報錯 path = os.path.join(base_path, "多線程和多進程", "threading_event.py") path1 = os.path.join(base_path, "Socket通信") # 拷貝後的文件名爲"threading_event.py" shutil.copy(path, path1) path1 = os.path.join(base_path, "Socket通信", "nihao.py") # 拷貝後的文件名爲"nihao.py" shutil.copy(path, path1) # 10.文件或文件夾重命名(或者叫移動) 移動時,如果移動後的路徑不存在,則會報錯 path1 = os.path.join(base_path, "Socket通信", "test1.py") # path2 = os.path.join(base_path, "nihao1", "nihao") # 路徑不存在,在移動時,程序報錯 # path2 = os.path.join(base_path, "nihao1") # 移動後文件的名字爲nihao1,不知道時什麼格式的文件 # path2 = os.path.join(base_path, "nihao1.py") # 移動後文件的名字爲nihao1.py path2 = os.path.join(base_path) # 移動後文件的名字爲test1.py shutil.move(path1, path2)