使用os.listdir方法时,我需要告诉结果列表中的哪个项目是目录或只是文件。
当我不得不浏览此列表中的所有目录,然后在每个目录中添加文件时,我遇到了问题。
有没有办法浏览此列表并从中删除所有文件?如果无法使用os.listdir,我应该使用什么方法呢?
感谢。
答案 0 :(得分:18)
使用os.path.isdir
过滤掉目录。可能类似
dirs = filter(os.path.isdir, os.listdir('/path'))
for dir in dirs:
# add your file
答案 1 :(得分:7)
这可能会更快:
current, dirs, files = os.walk('/path').next()
目录列表将位于dirs
变量中。
答案 2 :(得分:2)
dirs = filter(os.path.isdir,os.listdir('/ path'))
注意除非'/ path'是当前工作目录,否则这将不起作用。 os.listdir()返回叶子名,所以你会问“os.path.isdir('file.txt')”,如果当前目录在别处,你会看到错误的'file.txt'。
应该在os.listdir()的输出上使用os.path.join()来获取完整的文件名。children= [os.path.join('/path', child) for child in os.listdir('/path')]
directories= filter(os.path.isdir, children)
答案 3 :(得分:1)
要评估当前目录的子项:
w
示例输出:
import os
# Creates a list with all children items
cd_children = os.listdir()
# Iterate through the list
for item in cd_children:
# If item is a directory (folder) do...
if os.path.isdir(item):
print('{:<13}{:<21}'.format('folder', item))
# If item is a file do ...
elif os.path.isfile(item):
print('{:<13}{:<21}'.format('file', item))