我想要一个子目录列表,然后打印它

时间:2013-12-09 17:06:15

标签: python

我是python的新手,如果这个问题太基础,请提前抱歉。

我想读取路径的子目录列表然后打印它。但不是打印子目录的名称,而是打印字符:

products = []
dir_path = "/tmp"
for item in os.listdir(dir_path):
    products.extend(item)
index = 0
for product in products:
    print "%d %s" % ((index+1),product)
    index += 1

我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

[(idx, f) for idx, f in enumerate(os.listdir('.'))]

编辑(由@DSM建议):

list(enumerate(os.listdir('.')))

答案 1 :(得分:2)

你正在使用extend,它接受​​一个iterable并将它的每个元素添加到一个列表中,而不是append,它只是添加你传递给它的参数。像这样:

>>> a = [1,2]
>>> a.extend([3,4])
>>> a
[1, 2, 3, 4]
>>> b = [1,2]
>>> b.append([3,4])
>>> b
[1, 2, [3, 4]]

字符串的行为类似于字符列表。因此,extend会添加项目的每个字符,而不是项目本身。

您不需要使用循环来构建列表,因为os.listdir无论如何都会返回一个:

products = os.listdir(dir_path)

你可以编写第二个循环而不用自己增加索引:

for idx, product in enumerate(products):
    print "%d %s" % ((index+1),product)

enumerate函数生成一个对象,该对象只生成您需要的(index,listitem)对。

答案 2 :(得分:1)

我要说的第一件事就是

products.extend(item)

extends方法通过附加给定列表中的所有项来扩展列表。由于strings是可迭代对象,因此您只需将所有字符添加到列表中。将方法更改为append

第二件事是如果你想在一个循环中使用enumerate方法获取一个元素及其索引。不要使用计数器变量。

for index, item in enumerate(products):
    print "%d %s" % (index, item)

最后一个。
os.listdir返回指定目录中的所有条目。如果您只想获取子目录

products = (d for d in os.listdir('.') if os.path.isdir(d))
for i, product in enumerate(products):
    print "{0} {1}".format(i, product)

答案 3 :(得分:0)

您需要项添加到列表中。

products.add(item)

extend将任何 iterable (路径)中的所有项(您的案例中的字符)添加到列表中。