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