2016-02-11 68 views
3
foo = '/input/directory/' 
faa = ['/input/directory/file1.txt', '/input/directory/file2.txt'] 

我需要從我的名單(FAA)和文件擴展名刪除目錄名(例如,foo),只留下刪除定義字符串 - 蟒蛇

bar = ['file1', 'file2'] 

回答

4

使用map

bar = map(lambda x: '.'.join(x.replace(foo, '').split('.')[:-1]), faa) 
+1

這是稍微不正確的 - 如果該文件的名稱中包含點,該怎麼辦?因此第一個lambda應該被修改。 編輯:使用新的縮短代碼 - split()的切片不應該只是[0] :) ...編輯2:您應該使用rsplit(___,1)[0]來代替。 – plamut

+0

@plamut同意,現在修復 – hjpotter92

+0

現在看起來不錯:) – plamut

0

你可以做到以下幾點:

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'] 
1

嘗試;

>>> [x.replace(foo, '').split('.')[0] for x in faa] 
['file1', 'file2'] 
0

你可以做到以下幾點:

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'] 
+1

'foo ='/ input/directory'' < - 字符串應該引用 – hjpotter92

+0

啊,是的,你是對的(我從OP的問題複製粘貼它) 。 –

1

可能:

bar = [elem.replace(foo, '').rsplit('.', 1)[0] for elem in faa] 
+0

啊,我忘了python有'[lr] split','[lr] strip'等... – hjpotter92

1
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) 
0

你湊LD使用re模塊和re.findall實現與背後(?<=)正面看你foo串並提前積極找extension錨字符串的結尾:

res = [re.findall('(?<={}).+(?=[.].*$)'.format(foo), elem)[0] for elem in faa] 

print(res) 
['file1', 'file2'] 

:你可以檢查regex表達與regex101.com