Python 文件和目录管理(os)(python编程)

网友投稿 383 2022-08-23


Python 文件和目录管理(os)(python编程)

简述

目录(或文件夹)是文件和子目录的集合

在 Linux 中,操作系统提供了很多的命令(例如:​​ls​​​、​​cd​​​),用于文件和目录管理。在 Python 中,有一个 ​​os​​ 模块,也提供了许多便利的方法来管理文件和目录。

os 模块

​​os​​​:语义为操作系统。所以,​​os​​ 模块提供的肯定是操作系统相关的功能了(与具体的平台无关)。

如果用 ​​dir()​​​ 查看 ​​os​​,会发现内容相当多。下面,只列出文件和目录的相关方法:

方法

描述

​getcwd()​

获取当前工作目录

​chdir(path)​

将当前的工作目录更改为指定的路径

​listdir(path=None)​

列出指定目录中的文件名。如果 ​​path​​​ 为 ​​None​​​,则使用 ​​path='.'​​。

​mkdir(path, mode=511, *, dir_fd=None)​

创建目录

​makedirs(name, mode=511, exist_ok=False)​

递归创建多层目录

​rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)​

重命名文件或目录

​remove(path, *, dir_fd=None)​

删除文件

​rmdir(path, *, dir_fd=None)​

删除目录

​removedirs(name)​

递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空抛出异常。

​walk(top, topdown=True, onerror=None, followlinks=False)​

遍历 ​​top​​​ 路径下的所有子目录,返回一个包含 3 个元素的元组:​​(dirpath, dirnames, filenames)​​。

​os.curdir​

指代当前目录(​​'.'​​)

​os.pardir​

指代上一级目录(​​'..'​​)

​os.sep​

路径分割符(Windows 为 ​​'\\'​​​,Linux 为 ​​'/'​​)

​os.linesep​

行终止符(Windows 为 ​​'\r\n'​​​,Linux 为 ​​'\n'​​)

​os.name​

指代当前使用的操作系统(Windows 系统为 ​​'nt'​​​,Linux 为 ​​'posix'​​)

简单认识 ​​os​​ 模块后,来看如何使用 - 输出当前的操作系统:

>>> import os>>> os.name # 操作系统'posix'

如果是 ​​posix​​​,说明系统是 Linux;如果是 ​​nt​​,则是 Windows 系统。

获取当前工作目录

要获取当前工作目录,有两种方式:

​​getcwd()​​:以 unicode 字符串的形式返回​​getcwdb()​​:以 bytes 字符串的形式返回

>>> os.getcwd()'/home/wang/workspace'>>> >>> os.getcwdb()b'/home/wang/workspace'

更改当前工作目录

可以使用 ​​chdir()​​ 更改当前工作目录:

>>> os.getcwd() # 更改前'/home/wang/workspace'>>> >>> os.chdir("/etc") # 更改当前工作目录>>> >>> os.getcwd() # 更改后'/etc'

注意: 在 Windows 中,经常也会使用反斜杠(​​\​​​),这时使用转义序列(​​\\​​)更安全。

列出文件和目录

目录中的所有文件和子目录可以使用 ​​listdir()​​ 列出:

>>> os.listdir('/') # 列出根目录 / 中的文件和子目录['boot', 'dev', 'home', 'proc', 'run', 'sys', 'var', 'etc', 'root', 'tmp', 'usr', 'bin', 'sbin', 'lib', 'lib64', 'media', 'mnt', 'opt', 'srv']>>> >>> os.getcwd()'/home/wang/workspace'>>> os.listdir() # 列出当前目录中的文件和子目录['python', 'README.txt']

注意: 如果没有指定路径,将从当前目录返回。

创建目录

可以使用 ​​mkdir()​​ 创建目录:

>>> os.listdir() # 创建前['python', 'README.txt']>>> >>> os.mkdir("PHP") # 在当前路径下,创建名为 PHP 的目录>>> >>> os.listdir() # 创建后['python', 'README.txt', 'PHP']

注意: 如果未指定完整路径,则将在当前目录中创建。

重命名文件或目录

​​rename()​​ 可以重命名文件或目录,第一个参数为旧名称,第二个参数为新名称:

>>> os.listdir() # 重命名前['python', 'README.txt', 'PHP']>>> >>> os.rename("README.txt", "Notice.txt") # 重命名文件>>> os.rename("PHP", "Java") # 重命名空目录>>> os.rename("python", "Py") # 重命名非空目录>>> >>> os.listdir() # 重命名后['Notice.txt', 'Java', 'Py']

可以看到,无论目录是否为空,都可以重命名成功。

删除文件或目录

可以使用 ​​remove()​​​ 删除文件,使用 ​​rmdir()​​ 删除空目录:

>>> os.listdir() # 删除前['Notice.txt', 'Java', 'Py']>>> >>> os.remove("Notice.txt") # 删除文件>>> os.rmdir("Java") # 删除空目录>>> >>> os.listdir() # 删除后['Py']

注意: ​​rmdir()​​​ 只能删除空目录,无法删除非空目录。否则,会引发 ​​OSError​​。

要删除非空目录,需要借助 ​​shutil​​​ 模块,使用 ​​rmtree()​​:

>>> os.listdir()['Py']>>> >>> os.rmdir("Py") # 无法删除非空目录...OSError: [Errno 39] Directory not empty: 'Py'>>> >>> import shutil>>> shutil.rmtree("Py") # 删除非空目录>>> >>> os.listdir()[]

但是,复制、移动文件的相关函数居然在 ​​os​​ 模块中不存在!原因是复制文件并非由操作系统提供的系统调用。

幸运的是,​​shutil​​​ 模块提供了 ​​copy()​​​、​​move()​​​ 相关的函数,还可以在 ​​shutil​​​ 模块中找到很多实用函数,它们可以看做是 ​​os​​ 模块的补充。

遍历目录

​​walk()​​​ 是遍历目录常用的方法,它返回一个包含 3 个元素的元组:​​(dirpath, dirnames, filenames)​​:

​​dirpath​​:以字符串形式返回该目录下所有的绝对路径​​dirnames​​:以列表形式返回每一个绝对路径下的目录​​filesnames​​:以列表形式返回该路径下所有文件

使用命令 ​​tree​​,以树状图列出目录的内容:

[wang@localhost workspace]$ tree.├── python│ ├── Notice.txt│ └── os│ ├── test2.py│ └── test.py└── README.txt2 directories, 4

使用 ​​walk()​​ 方法:

>>> for root, dirs, files in os.walk("/home/wang/workspace"):... print(root)... print(dirs)... print(files)... print()... /home/wang/workspace['python']['README.txt']/home/wang/workspace/python['os']['Notice.txt']/home/wang/workspace/python/os[]['test.py', 'test2.py']


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Bean生命周期之属性赋值阶段详解
下一篇:Python 异常处理(python培训)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~