Поскольку вы пытаетесь отделить расширение имени файла, а не произвольную строку, имеет смысл использовать os.path.splitext
(или модуль pathlib
). Хотя это и не имеет практического значения для единственных значимых в настоящее время платформ (Windows и *nix), концептуально все же понятнее, что вы делаете. (И если вы позже начнете использовать объекты, подобные пути, вместо строк, он продолжит работать без изменений, для загрузки.)
So:
paths = [os.path.splitext(path)[0] for path in paths]
Между тем, если это действительно вас оскорбляет по какой-то причине, то, что glob
делает под прикрытием, просто вызывает fnmatch
, чтобы преобразовать ваше выражение glob в регулярное выражение, а затем применяет это ко всем именам файлов. Таким образом, вы можете заменить его, просто заменив регулярное выражение и используя группы захвата:
rtxt = re.compile(r'(.*?)\.txt')
files = (rtxt.match(file) for file in os.listdir(dirpath))
files = [match.group(1) for match in files if match]
Таким образом, вы не выполняете компоновку списка поверх того, что уже находится в glob
; вы делаете один вместо того, что уже есть в glob
. Я не уверен, полезная это победа или нет, но поскольку вы, кажется, заинтересованы в устранении listcomp...
person
abarnert
schedule
18.06.2018
Getting file names without file extension with glob
будет лучше? - person Simon   schedule 18.06.2018glob
не принимает шаблоны регулярных выражений, он использует шаблоны глобусов, а это совсем другое. Под прикрытием он создает шаблоны регулярных выражений для применения к списку файлов, но вы их не видите. (Если вы хотите их увидеть, см. модульfnmatch
.) - person abarnert   schedule 18.06.2018