Python 目录
最后修改于 2024 年 1 月 29 日
Python 目录教程展示了如何在 Python 中操作目录。我们演示了如何在 Python 中创建、重命名、移动或列出目录。
目录定义
目录是计算机文件系统中用于存储和定位文件的组织单元。目录被分层组织成一个目录树。目录具有父子关系。目录有时也称为文件夹。
Python 中有多种用于操作目录的函数。它们位于 os
和 pathlib
模块中。在本教程中,我们使用 pathlib
模块,它具有更现代的 API。
Python 创建目录
Path.mkdir
可以创建单个目录或多个目录,包括中间目录。
如果目录已存在,则会引发 FileExistsError
。
#!/usr/bin/python from pathlib import Path p = Path('test') p.mkdir()
此示例使用 Path
的 mkdir
函数创建目录。
$ ./create_dir.py $ ./create_dir.py Traceback (most recent call last): File "./create_dir.py", line 6, in <module> p.mkdir() File "/usr/lib/python3.8/pathlib.py", line 1284, in mkdir self._accessor.mkdir(self, mode) FileExistsError: [Errno 17] File exists: 'test'
当我们运行程序两次时,会抛出异常。为了解决这个问题,我们可以检查目录是否已经存在。
#!/usr/bin/python from pathlib import Path dir_name = 'test' p = Path(dir_name) try: if not p.exists(): p.mkdir() except OSError: print(f'Error: Creating directory. {dir_name}')
在创建目录之前,我们使用 Path.exists
函数检查它是否已存在。我们还捕获了可能的异常。
另一种解决方案是使用 exist_ok
标志。如果将此标志设置为 True
,则会忽略 FileExistsError
异常。
#!/usr/bin/python from pathlib import Path dir_name = 'test' p = Path(dir_name) p.mkdir(exist_ok=True)
在此示例中,我们忽略了 FileExistsError
异常。
Python 创建临时目录
tempfile.TemporaryDirectory
函数可以安全地创建临时目录。在上下文完成或临时目录对象被销毁时,新创建的临时目录及其所有内容都会从文件系统中删除。
#!/usr/bin/python import tempfile with tempfile.TemporaryDirectory() as tempdir: print(f'created temporary directory {tempdir}')
此示例创建了一个临时目录。当程序结束时,该目录将被销毁。
$ ./create_temp_dir.py created temporary directory /tmp/tmpww4breow
程序在特殊的 /tmp
目录中创建了一个临时目录,该目录在 Linux 上用于此类目的。
Python 重命名目录
Path.rename
函数用于重命名目录。
#!/usr/bin/python from pathlib import Path src = 'test' dest = 'test2' p = Path(src) p.rename(dest)
在此示例中,我们将 test
目录重命名为 test2
。
Python 删除目录
目录使用 Path.rmdir
函数删除。目录必须为空。
#!/usr/bin/python from pathlib import Path p = Path('test2') p.rmdir()
此示例删除了 test2
目录。
Python 移动目录
shutil.move
函数用于移动目录。
shutil.move(src, dst, copy_function=copy2)
shutil.move
将文件或目录(src)递归地移动到另一个位置(dst)并返回目标。
有两个复制函数:copy
和 copy2
;默认是 copy2
。它们在处理文件元数据方面有所不同。copy2
尝试保留所有文件元数据,而 copy
则不。
#!/usr/bin/python import shutil src = 'docs' dst = 'docs2' shutil.move(src, dst)
此示例将 doc
目录的内容移动到 docs2
。
$ mkdir docs $ touch docs/data.txt docs/names.csv docs/numbers.csv
我们创建了 docs
目录和一些文件。
$ ./move_dir.py $ ls docs2/ data.txt names.csv numbers.csv
我们运行程序并显示新目录的内容。
Python 当前工作目录
Path.cwd
函数返回一个表示当前目录的新路径对象。
#!/usr/bin/python from pathlib import Path from os import chdir path = Path('..') print(f'Current working directory: {path.cwd()}') chdir(path) print(f'Current working directory: {path.cwd()}') chdir('..')
此示例更改目录并打印当前目录。
Python 主目录
Path.home
函数返回一个表示用户主目录的新路径对象。
#!/usr/bin/python from pathlib import Path home = str(Path.home()) print(home)
程序打印启动它的用户的家目录。
Python 目录父级
Path.parent
返回路径的父目录,而 Path.parents
返回路径的祖先序列。
#!/usr/bin/python from pathlib import Path path = Path.cwd() print(f'The parent directory of {path} is {path.parent}') print(f'The parent of the parent of {path} is {path.parent.parent}') print(f'All the parents of {path.parent}: ') print(list(path.parents))
此示例打印当前工作目录的各个父目录。
Python 列出目录内容
Path.iterdir
产生目录内容的路径对象。子项以任意顺序产生,并且不包含特殊条目 '.' 和 '..'。
#!/usr/bin/python from pathlib import Path path = Path('.') dirs = [e for e in path.iterdir()] for mydir in dirs: print(mydir)
此示例列出了当前工作目录的文件和目录。列表是非递归的。
Python 检查路径是否为目录
如果路径指向一个目录,Path.is_dir
返回 True
。
#!/usr/bin/python from pathlib import Path path = Path('.') dirs = [e for e in path.iterdir() if e.is_dir()] print(*dirs)
在此示例中,我们列出了当前工作目录的所有直接子目录。
$ ./list_dirs.py mydata docs2 listdirectory
在我们的例子中,我们有三个子目录。
Python 递归列出目录
path.rglob
递归地生成所有匹配给定简单模式的文件。
#!/usr/bin/python from pathlib import Path path = Path('..') for e in path.rglob('*.py'): print(e)
在此示例中,我们递归地遍历父目录的内容并打印所有 Python 文件。
来源
在本文中,我们学习了如何在 Python 中操作目录。
作者
列出所有 Python 教程。