我是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
我在这里做错了什么?
答案 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 (路径)中的所有项(您的案例中的字符)添加到列表中。