Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当使用os.walk列出多个文件名时,为什么我不能通过列表索引调用每个文件名?_Python_List_Os.walk - Fatal编程技术网

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

Python 当使用os.walk列出多个文件名时,为什么我不能通过列表索引调用每个文件名?,python,list,os.walk,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):

如果有人问我并回答了这个问题,我深表歉意——我已经彻底搜索过了,但似乎找不到对我看到的行为的明确解释,而且我对编程和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生成dirpath、dirnames、filenames,其中“filenames”是“dirpath中非目录文件的名称列表”——但我想我不理解列表,也不知道如何正确访问其中的数据


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

正如sjdm在评论中已经说过的,问题是您正在访问
文件名
字符串的第三个元素(这是一个字符)而不是文件列表中的第三个元素

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

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

您在文件名上循环,因此对于每个文件名,您选择字符串中的第三个数组元素,即文件名e.g。每个文件名都是一个字符串,是一个字符数组,因此循环会查看每个文件名,并在该文件名的字符数组中选择第三个元素,这有意义吗?请查看以下内容:是,我误解了工作流逻辑-我在调用print时没有意识到“for”循环仍在起作用-感谢您的解释!是的,我现在明白了-我已将您的答案标记为正确,并感谢您提供问题的解决方案和解释!