列出目录下的文件是个常见的操作,python 提供了非常简单的方法: os.walk
基本方法 os.walk
1
2
3
4
5
6
7
8
9
10
11
12
13
| import os
import sys
# 获取某个目录下面的所有文件
def get_all_file(path):
filepaths = []
for root, dirs, files in os.walk(path):
for name in files:
filepaths.append(os.path.join(root, name))
return filepaths
if __name__ == '__main__':
print(get_all_file(sys.argv[1]))
|
运行
1
| python3 how-to-list-files-in-dir.py .
|
输出
1
| ['./how-to-delete-item-from-dict.py', './how-to-concatenate-list.py', './how-to-use-zip.py', './README.md', './.gitignore', './.git/objects/38/c39402faef62e4db173320bc2b2b08bca6dd56', ... ...
|
注意,这里会讲子目录的内容都列举出来,这是因为os.walk(top, topdown=True, onerror=None, followlinks=False):
中饿 topdown 默认为 True。
如果想过滤某种类型文件,可以按照如下方法:
1
2
3
4
5
6
7
8
9
10
11
12
| import os
import sys
# 获取某个目录下面的所有文件
def get_all_file(path, ext='*'):
filepaths = []
for root, dirs, files in os.walk(path):
for name in files:
if ext == '*' or name.endswith(ext):
filepaths.append(os.path.join(root, name))
return filepaths
if __name__ == '__main__':
print(get_all_file(sys.argv[1], '.py'))
|
这样即可显示所有的.py 格式文件了。
1
| ['./how-to-delete-item-from-dict.py', './how-to-concatenate-list.py', './how-to-use-zip.py',... ...]
|
如果想显示所有子目录,可以如下方式:
1
2
3
4
5
6
7
8
9
10
11
| import os
import sys
def get_all_dir(path):
dirpaths = []
for root, dirs, files in os.walk(path):
for name in dirs:
dirpaths.append(os.path.join(root, name))
return dirpaths
if __name__ == '__main__':
#print(get_all_dir(sys.argv[1]))
|
输出
1
| ['./.git', './assets', './tmp', './.git/objects', './.git/info', ... ...]
|
还有一种更简单的办法,显示目录 os.listdir(sys.argv[1])
1
| print(os.listdir(sys.argv[1]))
|
输出
1
| ['./how-to-delete-item-from-dict.py', './how-to-concatenate-list.py', './how-to-use-zip.py', ... ... ]
|
补充一种办法(glob 模块):
1
2
3
4
5
6
| import glob
path = './'
files = [f for f in glob.glob(path + "**/*.py", recursive=True)]
for f in files:
print(f)
|
输出
1
2
3
4
| ./how-to-use-whoisclient.py
./how-to-convert-time-str-and-datetime.py
./how-to-delete-item-from-dict.py
... ...
|
以上在 python3.7 测试通过。