输出文件和目录清单

时间:2019-07-23 12:00:41

标签: python-3.x

我正在努力弄清楚如何在目录列表中获得正确的输出。

for filename in os.listdir("C:\\scripts"):
    print(filename)

Outputs:
folder1
folder2
folder3

for top, dirs, files in os.walk('c:\\scripts'):
    for nm in files:
        print(os.path.join(top, nm))

Outputs:
c:\scripts\folder1\Document1.txt
c:\scripts\folder1\Document2.txt
c:\scripts\folder1\Document3.txt
c:\scripts\folder2\Document1.txt
c:\scripts\folder2\Document2.txt
c:\scripts\folder2\Document3.txt

但是我试图弄清楚如何以输出的以下格式结尾:

Directory folder1 contains:
Document1
Document2
Document3

Directory folder2 contains:
Document1
Document2
Document3

以此类推,任何有关如何实现此目标的指示都会有很大帮助。

4 个答案:

答案 0 :(得分:0)

'walk()'函数将为您提供每个文件及其绝对路径的子树。

如果只需要将文件放在一个子目录下,则可以像以前一样从“ listdir()”开始,将这些目录名放在列表中,最后遍历列表以选择带有“ isfile”的文件()”。

示例:

import os

first_lvl_dirs = [dn for dn in os.listdir(".") if os.path.isdir(dn)]

print (first_lvl_dirs)

for dn in first_lvl_dirs:
  print (f"{dn} contains : ")
  for f in os.listdir(dn):
      print(" - "+f)

答案 1 :(得分:0)

您可以使用dict来存储数据,然后对其进行迭代。使用os.path.basename获取目录名称

例如:

import os

result = {}
for top, dirs, files in os.walk('c:\\scripts'):
    for nm in files:
        result.setdefault(os.path.basename(top), []).append(nm)

for dirname, filenames in result.items():
    print("Directory {} contains:".format(dirname))
    for filename in filenames:
        print(filename)

答案 2 :(得分:0)

您请求的格式的完整代码可能是这样的

import os

source_dir = 'test'
for item in os.listdir(source_dir):
    folder = os.path.join(source_dir, item)
    if (os.path.isdir(folder)):
        print("Directory {} contains:".format(item))
        for file in os.listdir(folder):
            print(os.path.splitext(file)[0])
        print()

如果您只需要列出一级深度目录及其文件内容。

答案 3 :(得分:0)

Python的os.walkroot目录上进行迭代,并且每次迭代均以3元组的形式返回该根目录中的所有子目录和文件。因此,您可以做的是:

for top, dirs, files in os.walk('c:\\scripts')[1:]:
    print("Directory {} contains:".format(top)
    for nm in files:
        print(nm)

请注意,循环中的[1:]是跳过实际的顶级文件夹参数,并直接遍历所有子文件夹