【Python从入门到精通】(十八)Python的文件夹操作,创建文件夹复制文件等等

举报
码农飞哥 发表于 2021/08/15 11:44:48 2021/08/15
【摘要】 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

  1. os.path.abspath(path) 获取当前目录的绝对路径
  2. os.path.isabs(path) 如果参数path是一个绝对路径,就返回True,如果参数是一个相对路径,就返回False。
  3. os.path.relpath(path,start) 将返回从start路径到path的相对路径的字符串,如果没有提供start,就使用当前工作目录作为开始目录。
  4. os.path.dirname(path) 将返回一个字符串,它包含path参数中最后一个斜杠之前的所有内容。
  5. os.path.basename(path) :将返回一个字符串,它包含path参数中最后一个斜杠之后的所有内容。
  6. os.path.split(path): 可以通过获得包含路径的目录名称和基本名称的元组。
  7. os.path.exists(path) 判断路径path是否存在,如果存在则返回True,否则返回False。
  8. 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
  1. os.name 获取系统类型
  2. os.environ 获取系统环境变量
  3. os.path.join(path, *paths) 将多个目录拼接起来。
  4. os.path.splitext(path)[1] 获取文件的后缀名,其中path必须是一个文件完整路径。
  5. os.mkdir(path): 创建名为path的目录,需要注意的是该方法只能创建一层目录,不能递归创建目录,递归创建目录可以用os.makedirs(path)方法。
  6. os.rmdir(path):移除名为path的目录,需要注意的是该方法同样只能移除一层目录,不能递归删除目录。递归删除目录使用os.removedirs(path)方法。
  7. os.listdir(path):获取目录path下所有的子目录或者子文件。
  8. 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模块。该模块可以用来删除文件夹,复制文件等等。下面就简单的介绍一下其功能吧。

  1. shutil.copytree(src, dst) 用来复制文件夹,将src目录下的内容复制到dst目录下。如果dst目录下存在了src下的内容,则方法会报错。
  2. shutil.copyfile(src, dst) 用来复制文件,将src指定的文件复制给dst指定的文件
  3. 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中操作文件各种方法,主要涉及绝对路径,相对路径等知识点。

我是码农飞哥,再次感谢您读完本文

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。