пару альтернатив incBrain (в прекрасно) answer.
Во-первых, упростить свой код вместо того, чтобы изобретать колесо, используйте glob.glob
:
import glob
onlytxt = [file[:-4] for file in glob.glob('C:\\*.txt')]
Или получить более высокую производительность на Python 3.5+ (или любой версии Python, используя scandir
модуль из PyPI):
import os # Pre-3.5, you'd import and use the scandir module from PyPI
# Use file.path[:-4] to store the full path (sans .txt extension)
# where file.name[:-4] only gets the file name without the path or extension
onlytxt = [file.name[:-4] for file in os.scandir('C:\\') if file.name.endswith('.txt')]
Или для истинного нелепости, нажмите больше работы на уровне C и избежать избыточности путем отщепления расширения один раз, вместо одного чека на него, а затем еще одну операцию, чтобы лишить его:
import os
from operator import attrgetter
components = map(os.path.splitext, map(attrgetter('name'), os.scandir('C:\\')))
onlytxt = [root for root, ext in components if ext == 'txt']
os.scandir
не делает много для вас в этом случае (вы не читаете никаких атрибутов может быть проверены для вас), но в великоватом каталоге, это означает, что вы не хранить все записи сразу (os.listdir
и большинство других API-интерфейсов сначала прочитают полное содержимое каталога в list
, прежде чем у вас есть возможность его фильтровать), поэтому максимальное использование памяти уменьшается, когда сопоставляется несколько файлов.
«Манипулировать моими результатами» вы подразумеваете 'readlines()' или 'файл'? – Ian
'os.listdir (" C: \\ ")' уже возвращает список всех файлов в этом каталоге –
И я не думаю, что этот код должен работать ... 'file.readlines()' должна ошибка с ' AttributeError: объект 'str' не имеет атрибута 'readlines'' –