【发布时间】:2017-11-03 09:29:29
【问题描述】:
我试图打印一个目录的所有文件名:
import os
dir = '/etc'
def fr(dir):
filelist = os.listdir(dir)
for i in filelist:
fullfile = os.path.join(dir, i)
if not os.path.isdir(fullfile):
print(fullfile)
else:
fr(fullfile)
fr(dir)
但结果如下:
.....
/etc/man.conf
/etc/manpaths
/etc/master.passwd
/etc/master.passwd~orig
/etc/my.cnf
/etc/my.cnf.bak
/etc/nanorc
/etc/networks
/etc/networks~orig
/etc/newsyslog.conf
/etc/nfs.conf
/etc/nfs.conf~orig
/etc/notify.conf
.....
要知道,/etc/ssh/下有很多文件,但是没有打印,只打印第一级文件。二级文件和更深的文件没有打印。
有人可以帮我打印所有文件名吗?
【问题讨论】:
-
试试
os.walk() -
[os.path.join(dp, f) for dp, dn, filenames in os.walk('/etc') for f in filenames]来自here -
如果要打印目录内容,需要递归到目录中。但无需手动执行此操作。您可以使用
os.walk。或者,如果您有最近的 Python 3,请查看精彩的pathlib模块。 -
我认为 glob 是最简单的:
from glob import globpathnames = glob('./**/*')
标签: python