【问题标题】:Print all the files' name under a directory using Python [duplicate]使用Python打印目录下的所有文件名[重复]
【发布时间】: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


【解决方案1】:

你可以用import os 来做它可能是这样的: 导入操作系统

for dirname, dirnames, filenames in os.walk('C:/'): #provide which folder you need to list
    # print path to all subdirectories first.
    for subdirname in dirnames:
        print(os.path.join(dirname, subdirname))

    # print path to all filenames.
    for filename in filenames:
        print(os.path.join(dirname, filename))

结果会是这样的:

======== RESTART: C:\dev\sandbox\test.py ========
C:/$Recycle.Bin
C:/boot
C:/dev
C:/Documents and Settings
C:/_SMSTaskSequence
C:/appConfig.json
C:/BOOTSECT.BAK
C:/dev.7z
C:/for
......
C:/test.txt

and etc.:

参考:Directory listing in Python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 2014-12-30
    • 1970-01-01
    • 2020-03-23
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多