转义
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
- 方式2,文件会创建在
/Users/wupeiqi
目录下。cd /Users/wupeiqi python /Users/wupeiqi/PycharmProjects/CodeRepository/demo.py
文件和路径相关
os:获取路径、路径拼接、判断路径是否存在、创建文件夹、判断是否是文件夹\文件
shutil:删除、复制、移动
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)