#python #path #tree
Вопрос:
import os
path = "G:krunkermod"
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()
Я хочу, чтобы он печатал файлы в каждой отдельной папке пути, но он печатает только в последней
Комментарии:
1. Это тот самый первоначальный отступ?
for f in filenames:
должен быть отступ, чтобы выполняться для каждой итерации цикла. Если в нем нет отступа, он будет выполнен только один раз после завершения цикла.
Ответ №1:
Отступ неправильный. Вторая 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
Ответ №2:
Вы также можете использовать рекурсивную функцию, которая рекурсивно получает все содержимое подпапки до тех пор, пока не появится какая-либо подпапка:
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
Ответ №3:
Вы можете использовать этот вид кода для упрощения
import os
folder = r"C:pathtofindfiles"
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