2-1-07 文件操作 -路径相关
模块使用
# 路径相关
import os
# 操作文件或者文件夹
import shutil
路径相关
1 转义
windows路径使用的是\,linux路径使用的是/。
特别的,在windows系统中如果有这样的一个路径 D:\nxxx\txxx\x1,程序会报错。因为在路径中存在特殊符 \n(换行符)和\t(制表符),Python解释器无法自动区分。
所以,在windows中编写路径时,一般有两种方式:
-
加转义符,例如:"D:\nxxx\txxx\x1"
-
路径前加r,例如:r"D:\nxxx\txxx\x1"
2 程序当前路径
项目中如果使用了相对路径,那么一定要注意当前所在的位置。
例如:在/Users/wupeiqi/PycharmProjects/CodeRepository/路径下编写 demo.py文件
编写 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
import os
'''
# 1.获取当前运行的py脚本所在路径
# os.path.abspath 表示这个路径的绝对路径
#__file__表示当前运行的py文件
abs = os.path.abspath(__file__)
print(abs) # /Users/wupeiqi/PycharmProjects/luffyCourse/day09/20.路径相关.py
# 表示abs这个的上一级目录
path = os.path.dirname(abs)
print(path) # /Users/wupeiqi/PycharmProjects/luffyCourse/day09
'''
# 第一步可以用下面这个来表示
base_dir = os.path.dirname(os.path.abspath(__file__))
#绝对路径就是:file_path = base_dir + "/files/info.txt"
#路径拼接
file_path = os.path.join(base_dir, 'files', 'info.txt')
print(file_path)
# 判断文件路径是否存在
if os.path.exists(file_path):
file_object = open(file_path, mode='r', encoding='utf-8')
data = file_object.read()
file_object.close()
print(data)
else:
print('文件路径不存在')
3 文件和路径相关
1. 获取当前脚本绝对路径
import shutil # shutil ['ʃʌtl]
import os
abs_path = os.path.abspath(__file__)
print(abs_path)
2. 获取当前文件的上级目录
import shutil
import os
base_path = os.path.dirname( os.path.dirname(路径) )
print(base_path)
3. 路径拼接
import shutil
import os
p1 = os.path.join(base_path, 'xx')
print(p1)
p2 = os.path.join(base_path, 'xx', 'oo', 'a1.png')
print(p2)
4. 判断路径是否存在
import shutil
import os
exists = os.path.exists(p1)
print(exists)
5. 创建文件夹
"""
# 创建一个文件夹
os.makedirs(路径)
"""
path = os.path.join(base_path, 'xx', 'oo', 'uuuu')
if not os.path.exists(path):
os.makedirs(path)
6. 是否是文件夹
file_path = os.path.join(base_path, 'xx', 'oo', 'uuuu.png')
is_dir = os.path.isdir(file_path)
print(is_dir) # False 因为最后一个有后缀名.png,所以判断不是文件夹
folder_path = os.path.join(base_path, 'xx', 'oo', 'uuuu')
is_dir = os.path.isdir(folder_path)
print(is_dir) # True
7. 删除文件或文件夹
"""
os.remove("文件路径")
"""
"""
path = os.path.join(base_path, 'xx')
shutil.rmtree(path)
"""
8. 拷贝文件夹
#(要拷贝的文件夹,拷贝到哪里)
shutil.copytree("/Users/wupeiqi/Desktop/图/csdn/","/Users/wupeiqi/PycharmProjects/CodeRepository/files")
9.拷贝文件
# 复制文件过去,文件名和之前一样
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/")
# 复制文件过去,文件名改为x.png
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/x.png")
10.文件或文件夹重命名
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/xxxx.png")
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/files","/Users/wupeiqi/PycharmProjects/CodeRepository/images")