当用os.walk列出多个文件名时,为什么不能通过列表索引调用每个文件名?

时间:2018-10-03 23:55:12

标签: python list os.walk

如果已问及回答此问题,我深表歉意-我进行了彻底搜索,但似乎无法为我看到的行为找到清晰的解释,而且我对编程和python很陌生。

当我运行以下代码时:

import os
directory = "J:"
extension = "pdf"

for root, dirs, files in os.walk(directory):
    for filename in files:
        if filename.endswith("." + extension):
            print(filename)

它产生以下内容:

Bristol.Investments.Ltd.y16m03.INVOICE.pdf
Bristol.Investments.Ltd.y16m04.INVOICE.pdf
Bristol.Investments.Ltd.y16m05.INVOICE.pdf
James.Cunningham.2017.PAID.pdf
random.test.file.pdf

现在,如果我将其更改为

print(filename[2])

我希望它能像这样打印第三行:

Bristol.Investments.Ltd.y16m05.INVOICE.pdf

相反,我从每一行中得到第三个字母:

i
i
i
m
n

有人可以解释此行为吗?根据Python文档,os.walk产生目录路径,目录名称,文件名,其中“文件名”是“目录路径中非目录文件名称的列表”-但我想我不明白列表或如何访问数据正确地放在其中。

如果有人可以解释为什么我会看到这种行为,和/或如何从文件名列表中调用完整的文件名,我真的很感激,谢谢。

1 个答案:

答案 0 :(得分:1)

如sjdm在评论中所述,问题是您正在访问filename字符串的第3个元素(它是一个字符),而不是文件列表中的第3个元素。

为解决此问题,我建议将所有文件名存储在列表中:

import os
directory = "J:"
extension = "pdf"

pdf_files = []
for root, dirs, files in os.walk(directory):
    for filename in files:
        if filename.endswith("." + extension):
            print(filename)
            pdf_files.append(filename)

print(pdf_files)  # print all collected files
print(pdf_files[2]) # print third collected file