显示包含文件的路径树

Show path tree with files

import os

path = "G:\krunker\mod"
abcde = open("path.txt", "w")

for dirpath, dirnames, filenames in os.walk(path):
    directory_level = dirpath.replace(path, "")
    directory_level = directory_level.count(os.sep)
    indent = " " * 4
    print("{}{}/".format(indent*directory_level, os.path.basename(dirpath)), file=abcde)

for f in filenames:
        print("{}{}".format(indent*(directory_level+1), f), file=abcde)

abcde.close()

我希望它在路径的每个文件夹中打印文件,但它只在最后一个文件夹中打印

缩进不正确。第二个 for 循环也必须在第一个 for 循环内。

正确代码:

import os

path = "/home/user/my_folder/tools"
abcde = open("path.txt", "w")

for dirpath, dirnames, filenames in os.walk(path):
    directory_level = dirpath.replace(path, "")
    directory_level = directory_level.count(os.sep)
    indent = " " * 4
    print("{}{}/".format(indent*directory_level, os.path.basename(dirpath)), file=abcde)

    for f in filenames:
            print("{}{}".format(indent*(directory_level+1), f), file=abcde)

abcde.close()

部分path.txt内容:

tools/
    .gitignore
    README.md
    __init__.py
    requirements3.txt
    test.py
    path.txt
    .git/
        description
        hooks/
            commit-msg.sample
        info/
            exclude
        refs/
            heads/
                master

您还可以使用递归函数递归地获取所有子文件夹的内容,直到有任何子文件夹:

from os import walk

output = open("path.txt", "w")

def listFiles(path, indent):
    for (openedPath, folders, files) in walk(path):
        for file in files:
            output.write("\t" * (indent) + file + "\n")
        for folder in folders:
            output.write("\t" * (indent) + folder + "/\n")
            listFiles(path + "/" + folder, indent + 1)
        break

source = "/my/path/to/my/folder"
print(source + "/")
listFiles(source, 1)

有一个带有小代码项目文件夹的示例。

/my/path/to/my/folder/
        input.txt
        main.py
        output/
                error.cpp
                trying.cpp
                logo.cpp

你可以使用这种代码来简化

import os
folder = r"C:\path\to\find\files"
x = [os.path.join(r,file) for r,d,f in os.walk(folder) for file in f # If you want specific files if file.endswith(".txt")]
y = [os.path.join(r,folder) for r,d,f in os.walk(folder) for folder in d]
print(x) #For files in main directory and subdirectories
print(y) #For files in main directory and subdirectories