我正在努力弄清楚如何在目录列表中获得正确的输出。
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
以此类推,任何有关如何实现此目标的指示都会有很大帮助。
答案 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.walk
在root
目录上进行迭代,并且每次迭代均以3元组的形式返回该根目录中的所有子目录和文件。因此,您可以做的是:
for top, dirs, files in os.walk('c:\\scripts')[1:]:
print("Directory {} contains:".format(top)
for nm in files:
print(nm)
请注意,循环中的[1:]
是跳过实际的顶级文件夹参数,并直接遍历所有子文件夹