2013-06-17 2 views
0

Я хотел, чтобы извлечь последнюю часть имени файла, отделенное от постоянного префикса и «.csv»Распаковка части строки с нерегулярными разделителями в питоне

Имя файла может выглядеть :

constant_prefix_ мое имя файла .csv

или

constant_prefix_ MyFileName .csv

Я хотел бы, чтобы извлечь значения, выделенные жирным шрифтом в переменную.

Просьба сообщить.

+0

Довольно простой регулярное выражение:. '_ (. *) \ CSV $'. – HamZa

+1

@HamZa, который будет ловить 'filename' из' not_prefixed_filename.csv', поэтому вам нужно добавить префикс, как я. –

+0

@PeterVaro имеет смысл ... – HamZa

ответ

4

Сценарий:

import re 

name1 = 'constant_prefix_my file name.csv' 
name2 = 'constant_prefix_myfilename.csv' 

def get_name(string): 
    return re.findall(r'constant_prefix_(my.*)\.csv', string)[0] 

Демо:

print get_name(name1) 
print get_name(name2) 

Выход:

my file name 
myfilename 

Или вы можете сделать это:

names = [get_name(n) for n in [name1, name2]] 
print names 

Выход:

['my file name', 'myfilename'] 
1

использование str.split и os.path.splitext:

>>> import os 
>>> prefix = 'constant_prefix' 

# if your prefix includes the trailing `_` then don't use `_` in `str.split` 
# i.e just use this : `strs.split(prefix)[-1]` 

>>> name, ext = os.path.splitext(strs.split(prefix + '_')[-1]) 
>>> name 
'myfilename' 

>>> strs = "constant_prefix_my file name.csv" 
>>> name, ext = os.path.splitext(strs.split(prefix + '_')[-1]) 
>>> name 
'my file name' 
0
name1 = 'constant_prefix_my file name.csv' 
name2 = 'constant_prefix_myfilename.csv' 

constant_prefix = 'constant_prefix_' 

name1 = name1[len(constant_prefix):-4] # 'my file name' 
name2 = name2[len(constant_prefix):-4] # 'myfilename' 
Смежные вопросы