当用 os.walk 列出多个文件名时,为什么我不能通过列表索引调用每个文件名?
when listing multiple filenames with os.walk, why can I not call each file name via a list index?
如果有人问及回答这个问题,我深表歉意 - 我已经进行了彻底的搜索,但似乎无法找到对我所看到的行为的明确解释,而且我对编程和 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 生成目录路径、目录名、文件名,其中 "filenames" 是 "a list of the names of the non-directory files in dirpath" - 但我想我不了解列表或如何访问其中的数据正确。
如果有人能解释为什么我会看到这种行为,and/or如何从文件名列表中调用完整的文件名,我将不胜感激,谢谢。
正如 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
如果有人问及回答这个问题,我深表歉意 - 我已经进行了彻底的搜索,但似乎无法找到对我所看到的行为的明确解释,而且我对编程和 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 生成目录路径、目录名、文件名,其中 "filenames" 是 "a list of the names of the non-directory files in dirpath" - 但我想我不了解列表或如何访问其中的数据正确。
如果有人能解释为什么我会看到这种行为,and/or如何从文件名列表中调用完整的文件名,我将不胜感激,谢谢。
正如 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