Python 中的目录树列表
如何获取 Python 给定目录中所有文件(和目录)的列表?
How do I get a list of all files (and directories) in a given directory in Python?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何获取 Python 给定目录中所有文件(和目录)的列表?
How do I get a list of all files (and directories) in a given directory in Python?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(21)
最简单的方法:
Easiest way:
我知道这是一个老问题。 如果你使用的是 liunx 机器,这是我遇到的一个巧妙的方法。
I know this is an old question. This is a neat way I came across if you are on a liunx machine.
下面是一行 Python 版本:
此代码列出了给定目录名称中所有文件和目录的完整路径。
Here is a one line Pythonic version:
This code lists the full path of all files and directories in the given directory name.
如果我想到的话,我会把它扔进去。进行通配符搜索的简单而肮脏的方法。
If figured I'd throw this in. Simple and dirty way to do wildcard searches.
仅供参考 添加扩展名或 ext 文件的过滤器
导入操作系统
FYI Add a filter of extension or ext file
import os
下面的代码将列出目录和目录中的文件
Below code will list directories and the files within the dir
对于 Python 2
对于 Python 3
对于过滤器和映射,您需要用 list() 包装它们
现在建议您用生成器表达式或列表推导式替换映射和过滤器的使用:
For Python 2
For Python 3
For filter and map, you need wrap them with list()
The recommendation now is that you replace your usage of map and filter with generators expressions or list comprehensions:
一个很好的单行代码,仅递归地列出文件。 我在 setup.py package_data 指令中使用了这个:
我知道这不是问题的答案,但可能会派上用场
A nice one liner to list only the files recursively. I used this in my setup.py package_data directive:
I know it's not the answer to the question, but may come in handy
与我合作的版本是萨利赫在本页其他地方的答案的修改版本。
代码如下:
The one worked with me is kind of a modified version from Saleh's answer elsewhere on this page.
The code is as follows:
我写了一个长版本,其中包含我可能需要的所有选项: http://sam.nipl .net/code/python/find.py
我想它也适合这里:
I wrote a long version, with all the options I might need: http://sam.nipl.net/code/python/find.py
I guess it will fit here too:
递归实现
A recursive implementation
这是另一种选择。
它返回与路径给定的目录中的条目(以及文件属性信息)相对应的 os.DirEntry 对象的迭代器。
示例:
使用 scandir() 代替 listdir() 可以显着提高还需要文件类型或文件属性信息的代码的性能,因为 os.DirEntry 对象公开此信息如果操作系统在扫描目录时提供它。 所有 os.DirEntry 方法都可以执行系统调用,但 is_dir() 和 is_file() 通常只需要符号链接的系统调用; os.DirEntry.stat() 在 Unix 上总是需要系统调用,但在 Windows 上只需要符号链接。
Python 文档
Here is another option.
It returns an iterator of os.DirEntry objects corresponding to the entries (along with file attribute information) in the directory given by path.
Example:
Using scandir() instead of listdir() can significantly increase the performance of code that also needs file type or file attribute information, because os.DirEntry objects expose this information if the operating system provides it when scanning a directory. All os.DirEntry methods may perform a system call, but is_dir() and is_file() usually only require a system call for symbolic links; os.DirEntry.stat() always requires a system call on Unix but only requires one for symbolic links on Windows.
Python Docs
尝试这个:
Try this:
虽然 os.listdir() 可以很好地生成文件和目录名称的列表,但通常您希望在获得这些名称后执行更多操作 - 在 Python3 中,pathlib 使其他杂务变得简单。 让我们来看看,看看你是否和我一样喜欢它。
要列出目录内容,请构造一个 Path 对象并获取迭代器:
如果我们只想要一个事物名称列表:
如果您只想要目录:
如果您想要该树中所有conf文件的名称:
如果您想要一个列表树中的conf文件数>= 1K:
解析相对路径变得容易:
使用路径导航非常清晰(尽管出乎意料):
While
os.listdir()
is fine for generating a list of file and dir names, frequently you want to do more once you have those names - and in Python3, pathlib makes those other chores simple. Let's take a look and see if you like it as much as I do.To list dir contents, construct a Path object and grab the iterator:
If we want just a list of names of things:
If you want just the dirs:
If you want the names of all conf files in that tree:
If you want a list of conf files in the tree >= 1K:
Resolving relative paths become easy:
Navigating with a Path is pretty clear (although unexpected):
对于当前工作目录中未指定路径的文件
Python 2.7:
Python 3.x:
For files in current working directory without specifying a path
Python 2.7:
Python 3.x:
如果您需要通配能力,也有一个模块可以实现。 例如:
将返回类似以下内容:
请参阅此处的文档。
If you need globbing abilities, there's a module for that as well. For example:
will return something like:
See the documentation here.
这是我经常使用的辅助函数:
Here's a helper function I use quite often:
您可以使用
参考和更多操作系统功能,请看这里:
You can use
For reference and more os functions look here:
这是一种遍历目录树中每个文件和目录的方法:
This is a way to traverse every file and directory in a directory tree: