foo = '/input/directory/'
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt']
我需要从我的列表(faa)中移除目录名(即foo),并且去掉文件扩展名,只留下文件名。
bar = ['file1', 'file2']
>>> [x.replace(foo, '').split('.')[0] for x in faa]
['file1', 'file2']
bar = [elem.replace(foo, '').rsplit('.', 1)[0] for elem in faa]
foo = '/input/directory/'
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt']
import os.path
bar = [os.path.splitext(path.replace(foo, ''))[0]
for path in faa]
print(bar)
或者没有foo:
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt']
from os.path import basename, splitext
bar = [splitext(basename(path))[0]
for path in faa]
print(bar)
import os
foo = '/input/directory/'
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt', '/not/matching/foo/file3.txt']
faa = [os.path.splitext(os.path.split(f)[1])[0] if f.startswith(foo) else f for f in faa]
print faa
['file1', 'file2', '/not/matching/foo/file3.txt']
import os
foo = '/input/directory/'
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt', '/not/matching/foo/file3.txt']
faa = [os.path.splitext(os.path.split(f)[1])[0] for f in faa]
print faa
给定:
['file1', 'file2', 'file3']
import re
foo = '/input/directory/'
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt']
# Use a regular expression to match '<foo>someFileName<.fileExtension>'
faa = [re.sub(r'^%s(.*)\.\w+$' % foo, '\g<1>', elem) for elem in faa]
# faa => ['file1', 'file2']
re
模块和 re.findall
来实现这个功能,其中正向后查找 (?<=)
用于匹配你的 foo
字符串,正向前查找 extension
并锚定到字符串的末尾:res = [re.findall('(?<={}).+(?=[.].*$)'.format(foo), elem)[0] for elem in faa]
print(res)
['file1', 'file2']
注意:您可以使用regex101.com检查该regex
表达式。