欢迎光临
我们一直在努力

python文件和目录操作

我们平时在电脑上操作(读,写,删除,复制等等)文件和目录,主流的操作系统(带界面的
linux 系统,mac 系统,windows 系统等等)不但都有提供友好的可视化操作,也提供命令行操作。

无论是可视化操作还是通过命令行操作,最终都是转化为程序调用操作系统的 API 函数对文件和目录进行操作。

windows 和 linux 命令行操作文件和目录

如果我们要操作文件或目录,可以在命令行下面输入操作系统提供的各种命令来完成,比如 linux下的 pwd 显示当前路径,
ll 和 ls 显示当前目录下的文件和文件夹,rm 删除文件,mv 移动文件等等。

Windows 下的 dir 命令显示当前目录下的文件和文件夹,copy 复制文件,move 移动文件,del 删除当前路径下的文件等等。

对于操作系统提供的操作文件和目录的命令,大家用到时可以自行搜索,我们下面重点学习如何用 Python 提供的函数来操作文件和目录。

Python 操作文件的函数

我们可以使用 Python 内置的 os 模块提供的函数来检查一个文件是否存在。

import os

flag = os.path.exists("d:/test.txt")
print(flag)  # 如果文件存在返回 True,否则返回 False

我们上节课学习的写文件操作中,可以用标识符 ‘w’ 打开一个不存在文件,我们可以使用这种方法来创建一个文件,
但要注意,我们最好在创建文件时检查一下是否存在有重名的文件,如果存在就不要创建,否则的话会把原来的文件给冲掉。

import os

if not os.path.exists("d:/test.txt"):  # 如果文件不存在
    f = open("d:/test.txt", "w")       # 在 d 盘下创建一个 test.txt 文件
    f.close()
else:
    print("文件已存在,请换个文件名")

我们可以使用 Python 内置的 os 模块提供的函数来删除一个文件,如果删除的文件不存在 Python 解释器会报异常。

import os

if os.path.exists("d:/test.txt"):  # 如果文件存在
    os.remove("d:/test.txt")       # 删除 d 盘下的 test.txt 文件
else:
    print("要删除的文件不存在")

我们可以使用 Python 内置的 os 模块提供的函数来给一个存在的文件重命名,要确保被命名的文件存在以及新命名的文件名不存在,否则Python 解释器会报异常。

import os

if os.path.exists("d:/test.txt") and not os.path.exists("d:/newtest.txt"):
    os.rename("d:/test.txt", "d:/newtest.txt")
else:
    print("不存在该文件或重命名的文件名已存在")

我们还需要对文件进行拷贝,移动等等操作,后面我们会介绍更高级的模块来完成这些操作。

Python 操作目录的函数

我们可以使用 Python 内置的 os 模块提供的函数,查看当前文件所在目录的全路径。

import os

print(os.path.abspath("."))

我们可以使用 Python 内置的 os 模块提供的函数,在已经存在的目录下创建一个新目录。

import os

os.mkdir("d:/test/tt")  # 要确保 d:/test/ 目录存在,否则会报异常

我们可以使用 Python 内置的 os 模块提供的函数,删除一个存在的空目录(该目录下没有文件和目录)。

import os

os.rmdir("d:/test/tt")  # 要确保 d:/test/tt 目录下没有文件和目录,否则会报异常

如何删除一个存在的非空目录以及更复杂的目录操作,后面我们会介绍更高级的模块来完成这些操作。

Python 操作文件名和目录名的函数

把目录和文件进行路径拼接时,如果直接拼字符串,我们还要判断操作系统,因为在
Linux/Unix/Mac 下,os.path.join 函数返回的字符串是用 “/” 衔接的,在 windows 下,os.path.join
函数返回的字符串是用 “” 衔接的。我们可以使用 Python 内置的 os
模块的函数进行智能拼接路径。

import os

filepath = "d:/img"     # 我们在项目开发中一般不会使用绝对路径,在此只是为了举例说明
filename = "ruhua.png"

'''
注意:
1.filepath 中的字符串中的目录不要求在系统中存在,我们拼接的 filepath 和 filename 仅仅只是字符串拼接而已
2.我们 定义的 filepath 仅仅是在 windows 下做测试,实际项目开发中,我们不会用这种绝对路径的方式,因为我们
的项目很有可能部署在不同的操作系统上,那样的话我们还要修改连接符 '\' 或者 '/' 来对应我们的操作系统,这
显然不符合软件工程的理念。
3.所以下面这条语句在 windows 下会拼接成 "d:/imgruhua.png",在 linux 下会拼接成 "d:/img/ruhua.png",
我们想要的拼接是字符串 "d:/test" 和 字符串 "ruhua.png" 的拼接,所以实现了智能拼接。
'''
print(os.path.join(filepath, filename))

我们要拆分一个已存在文件或目录的全路径时,也不要直接去拆字符串,我们可以使用 Python 内置的 os
模块的函数,这样可以把一个路径拆分为两部分放在一个 tuple 里面,tuple 中的第二个值总是最后级别的目录或文件名。

import os

allfilepath = "d:/img/head/ruhua.png"  # 不要求系统中存在该路径,拆分的仅仅是字符串
print(os.path.split(allfilepath))      # 返回值为 ('d:/img/head', 'ruhua.png')

我们可以使用 Python 内置的 os 模块的函数得到文件扩展名,同样我们操作的对象是字符串,并不要求这个路径存在。

import os

allfilepath = "d:/img/head/ruhua.png"  # 不要求系统中存在该路径,拆分的仅仅是字符串
print(os.path.splitext(allfilepath))   # 返回值为 ('d:/img/head/ruhua', '.png')

使用高级模块 shutil 操作文件和路径

Python 内置的 os 模块只提供基本的文件操作,对于一些复杂的操作,比如对文件的拷贝操作,
删除非空文件夹等等,我们可以我们可以使用高级模块比如 shutil 模块。

import shutil

shutil.copy("d:/test.txt", "d:/testcp.txt")  # 拷贝文件
shutil.rmtree("d:/testdir")  # testdir 是非空文件夹

当然即使我们不使用 shutil 模块,使用 Python 提供的 os
模块也可以实现拷贝文件,删除非空文件夹等等所有的对文件的操作,其实 shutil
模块里面也是调用 os 模块来完成这些复杂的文件操作。

本节重要知识点

熟练使用 os 模块对文件和目录进行操作

熟练使用 shutil 模块以及其它第三方模块对文件进行操作。

赞(0) 打赏
未经允许不得转载:码农资源网 » python文件和目录操作
分享到

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册