python - 使用 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 产生 dirpath、dirnames、filenames,其中“filenames”是“dirpath 中非目录文件的名称列表”——但我想我不了解列表或如何访问数据正确地在他们里面。
如果有人可以解释为什么我会看到这种行为,和/或如何从文件名列表中调用完整的文件名,我将不胜感激,谢谢。
解决方案
正如 sjdm 在评论中已经说过的那样,问题是您正在访问filename
字符串的第三个元素(它是一个字符),而不是文件列表中的第三个元素。
为了解决这个问题,我建议将所有文件名存储在一个列表中:
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
推荐阅读
- android - 如何使用意图以语法方式从谷歌驱动器、android中的下拉框存储应用程序获取文件内容
- php - 日期范围切片
- jquery - 在 jquery ajax 调用之后,data-src 没有被 src 替换
- javascript - 在页面其他位置激活 Bootstrap 4 下拉菜单
- javascript - javascript中使用的这种语法在哪里(function(){}())
- android - Flutter - 如何在 android 中自动启用位置服务?
- javascript - Angular:焦点不会被多次触发
- javascript - 如何在 Project Clarity DataGrid 中使用 json 数组
- scala - 结合两个状态改变功能的优雅方式?
- c++ - 了解内存序列和 std::memory_order_relaxed