foo = '/input/directory/'
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt']
我需要从我的名单(FAA)和文件扩展名删除目录名(例如,foo),只留下删除定义字符串 - 蟒蛇
bar = ['file1', 'file2']
foo = '/input/directory/'
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt']
我需要从我的名单(FAA)和文件扩展名删除目录名(例如,foo),只留下删除定义字符串 - 蟒蛇
bar = ['file1', 'file2']
使用map
bar = map(lambda x: '.'.join(x.replace(foo, '').split('.')[:-1]), faa)
你可以做到以下几点:
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']
尝试;
>>> [x.replace(foo, '').split('.')[0] for x in faa]
['file1', 'file2']
你可以做到以下几点:
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']
'foo ='/ input/directory'' < - 字符串应该引用 – hjpotter92
啊,是的,你是对的(我从OP的问题复制粘贴它) 。 –
可能:
bar = [elem.replace(foo, '').rsplit('.', 1)[0] for elem in faa]
啊,我忘了python有'[lr] split','[lr] strip'等... – hjpotter92
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)
或者不富:
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)
你凑LD使用re
模块和re.findall
实现与背后(?<=)
正面看你foo
串并提前积极找extension
锚字符串的结尾:
res = [re.findall('(?<={}).+(?=[.].*$)'.format(foo), elem)[0] for elem in faa]
print(res)
['file1', 'file2']
注:你可以检查regex
表达与regex101.com
这是稍微不正确的 - 如果该文件的名称中包含点,该怎么办?因此第一个lambda应该被修改。 编辑:使用新的缩短代码 - split()的切片不应该只是[0] :) ...编辑2:您应该使用rsplit(___,1)[0]来代替。 – plamut
@plamut同意,现在修复 – hjpotter92
现在看起来不错:) – plamut