正如在其他答案中提到的,文件名列表没有更改的原因是因为您的代码没有更改它。有很多方法可以解决这个问题,包括建立一个新的列表并用它替换原来的列表。在
我认为最简单的方法是在迭代列表元素时修改列表(但是在执行此操作时必须小心,不要修改列表中尚未看到的部分)。Python有一个名为enumerate()的内置函数,它使这种任务易于编写代码。enumerate()所做的是返回一个“iterator”对象,当它从序列中提供每个项时,该对象对这些项进行计数——因此计数也是该序列中项目的索引,必要时可以使用该索引更新相应的列表元素。在
由于您的代码处理的是文件名,因此可以通过使用名为os.path的内置模块来进一步改进它,该模块可用于处理路径和文件名。该模块有一个splitext()函数,用于将文件名分成两部分:“根”和扩展名。在文档中,它被称为root而不是filename,因为它可以在其前面添加目录路径信息。在
如果您的代码是用enumerate()和os.path.splitext()重写的,则可能如下所示:import os
projectFilenames = ['2010-10-30-markdown-example.txt',
'2010-12-29-hello-world.mdown',
'2011-1-1-tester.markdown']
for i,f in enumerate(projectFilenames):
root,ext = os.path.splitext(f)
if ext in ('.txt', '.mdown', '.markdown'):
projectFilenames[i] = root # update filename list leaving ext off
print projectFilenames
# ['2010-10-30-markdown-example', '2010-12-29-hello-world', '2011-1-1-tester']
如果您想删除所有文件扩展名,而不仅仅是特定的扩展名,您可以将if ext in ('.txt', '.mdown', '.markdown'):更改为仅if ext:。在