2016-03-19 7 views
1

У меня есть список, в котором все элементы являются именами файлов из папки. Когда он внесен в список, это ['me.txt', 'you.txt', 'him.txt', 'her.txt']. Однако я хочу сделать это [«я», «ты», «он», «ее»). Я использовал функцию полосы .strip (". Txt"), но она все еще печатает первый. Любая помощь?Почему python не снимается?

files = [] 
for (dirpath, dirnames, filenames) in walk(path): 
    files.extend(filenames) 
    for filenames in files: 
     filenames = filenames.strip(".txt") 
    print(files) 
+1

Опасайтесь, 'str.strip()' не работает так, как вам кажется, что он работает. Попробуйте '' trust.txt '.strip (". Txt") 'и посмотрите [документацию] (https://docs.python.org/3/library/stdtypes.html#str.strip). – marcelm

ответ

0

Вы на самом деле не изменения пункта в массиве; вы меняете копию, созданную контуром for. Вы бы лучше, используя список понимание, который генерирует новый список, применяя что-то к существующему:

files = [] 
for (dirpath, dirnames, filenames) in walk(path): 
    files.extend(filenames) 
    files = [file.strip(".txt") for file in files] 
    print(files) 

Вы также можете использовать функцию map применить функцию к каждому элементу:

files = [] 
for (dirpath, dirnames, filenames) in walk(path): 
    files.extend(filenames) 
    files = list(map(lambda x: x.strip(".txt"), files)) 
    print(files) 
+0

спасибо, сейчас работаю :) – Eric1108

+0

@ Eric1108 Без проблем! Не забудьте принять ответы, которые вам помогли. –

+0

извините, им новый для переполнения стека. не знал о принятии ответов – Eric1108

Смежные вопросы