Python目录教程展示了如何在Python中使用目录。我们展示了如何在Python中创建、重命名、移动或列出目录。
目录定义
目录是计算机文件系统中用于存储和定位文件的组织单元。目录按层次结构组织成目录树。目录具有父子关系。目录有时也称为文件夹。
Python中有多种操作目录的函数。它们位于os和pathlib模块中。在本教程中,我们使用具有更现代API的pathlib模块。
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教程或列出所有Python教程。
