【Python从入门到精通】(十八)Python的文件夹操作,创建文件夹复制文件等等
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。
本文重点介绍PythonPython的文件夹操作,包括但是不限于创建文件夹复制文件。
干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。
@[TOC]
前言
上篇文章介绍了Python的模块和包。这篇文章接着介绍另一个非常重要的点–Python的文件操作(IO)。文件操作是程序必不可少的一个知识点。不管是文件的上传下载;还是文件的读取写入都属于文件的操作。话不多说,直接进入主题
绝对路径和相对路径
对于绝对路径和相对路径相信小伙伴们都不会陌生。绝对路径就是从根目录开始的路径,相对路径就是相对于当前工作目录所在的位置。
根目录:Window系统中以盘符(C: D:)作为根目录。而Max OS或者Linux系统中以/作为根目录。
当前工作目录:就是程序运行的工作目录,所有没有从根目录开始的文件名或者路径,都假定在当前工作目录下。在Python中可以通过os.getcwd()
函数取得当前工作路径的字符串,可以通过os.chdir()
改变它。
>>> import os
>>> os.getcwd()
'D:\\学习记录\\PycharmProjects\\python_demo_1'
如上本地程序的当前工作目录是D:\\学习记录\\PycharmProjects\\python_demo_1
,若文件file.txt位于该目录下,则file.txt的相对路径表示为.\file.txt
(其中.\
就表示当前目录)
文件路径的操作
Python中操作文件的模块是os模块。文件的所有操作方法由该模块提供。所以需要先引入该模块 import os
os.path.abspath(path)
获取当前目录的绝对路径os.path.isabs(path)
如果参数path是一个绝对路径,就返回True,如果参数是一个相对路径,就返回False。os.path.relpath(path,start)
将返回从start路径到path的相对路径的字符串,如果没有提供start,就使用当前工作目录作为开始目录。os.path.dirname(path)
将返回一个字符串,它包含path参数中最后一个斜杠之前的所有内容。os.path.basename(path)
:将返回一个字符串,它包含path参数中最后一个斜杠之后的所有内容。os.path.split(path):
可以通过获得包含路径的目录名称和基本名称的元组。os.path.exists(path)
判断路径path是否存在,如果存在则返回True,否则返回False。os.path.isdir(path)
: 判断路径path是否是文件夹,如果是的话则返回True,否则返回False。
9. os.path.isfile(path)
判断路径path是否是文件,如果是的话则返回True,否则返回False。
# 获取当前文件绝对路径
print(os.path.abspath("."))
#也可以这样写
basedir = os.path.abspath(os.path.dirname(__file__))
print(basedir)
# 判断是否是绝对路径
path = 'D:\\学习记录\\PycharmProjects\\python_demo_1'
print(os.path.isabs(path))
# 将返回从 start 路径到 path 的相对路径的字符串。
# 如果没有提供 start,就使用当前工作目录作为开始路径。
print(os.path.relpath("/python_demo_1", "D:\\学习记录\\PycharmProjects"))
print(os.path.relpath('/demo'))
# 获取当前类的路径
path = "D:\\学习记录\\PycharmProjects\\python_demo_1/demo/io/path_test.py"
print(os.path.basename(path))
print(os.path.dirname(path))
print(os.path.split(path))
# 判断路径是否存在
print(os.path.exists("D:\\学习记录\\PycharmProjects\\python_demo_1"))
print(os.path.isdir('D:\\学习记录\\PycharmProjects\\python_demo_1'))
print(os.path.isfile('D:\\学习记录\\PycharmProjects\\python_demo_1/demo/io/path_test.py'))
运行结果是:
D:\学习记录\PycharmProjects\python_demo_1\demo\io
True
..\..\python_demo_1
..\..\..\..\..\demo
path_test.py
D:\学习记录\PycharmProjects\python_demo_1/demo/io
('D:\\学习记录\\PycharmProjects\\python_demo_1/demo/io', 'path_test.py')
True
True
True
- os.name 获取系统类型
- os.environ 获取系统环境变量
- os.path.join(path, *paths) 将多个目录拼接起来。
- os.path.splitext(path)[1] 获取文件的后缀名,其中path必须是一个文件完整路径。
- os.mkdir(path): 创建名为path的目录,需要注意的是该方法只能创建一层目录,不能递归创建目录,递归创建目录可以用os.makedirs(path)方法。
- os.rmdir(path):移除名为path的目录,需要注意的是该方法同样只能移除一层目录,不能递归删除目录。递归删除目录使用os.removedirs(path)方法。
- os.listdir(path):获取目录path下所有的子目录或者子文件。
- os.remove(path): 删除文件
# 创建目录
os.mkdir("d:/test")
# 删除一个目录
os.rmdir('d:/test')
# 创建d:/test1/test2目录
os.makedirs("d:/test1/test2")
# 在某个目录下创建一个新目录,首先把新目录的完整地址表示出来
print(os.path.join("D:/学习记录/PycharmProjects", 'demo'))
# 获取文件扩展名
file_path = "D:/学习记录/PycharmProjects/python_demo_1/demo/io/os_test.py"
print("后缀名是:" + os.path.splitext(file_path)[1])
# 列出当前目录下的所有目录
gen = [x for x in os.listdir('.') if os.path.isdir(x)]
print(gen)
# 列出当前目录下所有的.py文件,也只需一行代码:
list = [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1] == '.py']
print(list)
运行结果是:
D:/学习记录/PycharmProjects\demo
后缀名是:.py
['serializable', 'test_io', 'test_io1']
['dir_test.py', 'io_demo.py', 'os_test.py', 'path_test.py', 'read_test.py', 'stringio_test.py']
列出当前目录已经当前目录的所有目录下后缀名是.py的所有文件。这里使用到了递归函数,通过splitext方法获取文件后缀名,通过listdir函数列出传入的filepath的所有子目录或者文件。
def gci(filepath):
files = os.listdir(filepath)
for fi in files:
fi_d = os.path.join(filepath, fi)
if os.path.isdir(fi_d):
gci(fi_d)
elif os.path.splitext(fi_d)[1] == '.py':
print(fi_d)
shutil模块
除了os模块之外,还有一个重要的操作文件或者文件夹的模块shutil模块。该模块可以用来删除文件夹,复制文件等等。下面就简单的介绍一下其功能吧。
- shutil.copytree(src, dst) 用来复制文件夹,将src目录下的内容复制到dst目录下。如果dst目录下存在了src下的内容,则方法会报错。
- shutil.copyfile(src, dst) 用来复制文件,将src指定的文件复制给dst指定的文件
- shutil.rmtree(path) 用于删除path目录
import shutil
import os
# 复制文件夹
src_os_path = "D:/学习记录/PycharmProjects/python_demo_1/demo/io"
dst_os_path = "D:/test1/test2/dst_io"
if not os.path.exists(dst_os_path):
shutil.copytree(src_os_path, dst_os_path)
# 文件复制
src_os_test_path = "D:/学习记录/PycharmProjects/python_demo_1/demo/io/os_test.py"
dst_os_test_path = "D:/test1/test2/dst_os_test.py"
if not os.path.exists(dst_os_test_path):
shutil.copyfile(src_os_test_path, dst_os_test_path)
path1 = "D:/test1/test4/test5"
if not os.path.exists(path1):
os.makedirs(path1)
# 删除文件夹
shutil.rmtree(path1)
运行结果是:
总结
本文详细介绍了Python中操作文件各种方法,主要涉及绝对路径,相对路径等知识点。
我是码农飞哥,再次感谢您读完本文。
- 点赞
- 收藏
- 关注作者
评论(0)