Как упоминалось в других ответах, причина в том, что список имен файлов не меняется, потому что ваш код не меняет его. Есть несколько способов исправить это, в том числе создать новый список и заменить его оригиналом.
Я думаю, что самым простым подходом было бы просто изменить список, когда вы перебираете его элементы (но при этом вы должны быть осторожны, чтобы не изменять части списка, которые еще не видны). В Python есть встроенная функция enumerate()
, которая упрощает кодирование такого рода задач. Что делает enumerate()
, так это возвращает объект «итератор», который отсчитывает элементы по мере того, как он предоставляет каждый элемент из последовательности, поэтому счетчик также является индексом элемента в этой последовательности, и при необходимости этот индекс может использоваться для обновления соответствующий элемент списка.
Поскольку ваш код имеет дело с именами файлов, его можно еще улучшить, используя встроенный модуль с именем 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:
.