символы Python для удаления символов из списка - PullRequest
0 голосов
/ 30 сентября 2011

Я пытаюсь удалить символы из отметки времени, хранящейся в матрице (или в списке списков, если хотите). Я хочу извлечь элемент и использовать его в качестве имени файла после удаления ненужных символов (он должен остаться неизменным в исходном списке). Я хорошо знаком со стриппингом и другими строковыми операциями, я использую его регулярно, но теперь я застрял с этим, я не знаю, что происходит, я попробовал почти все. Я хочу получить «2011092723492» вместо оригинального «2011.09.27 23:49 2». В этом примере просто «:» нужно заменить, чтобы было проще. Я что-то упустил?:

for x in FILEmatrix:
    flnm = str(x[4])               # or just 'x[4]' doesn't matter it is a string for sure
    print type(flnm)               # <type 'str'> OK, not a list or whatever
    print 'check1: ', flnm         # '2011.09.27 23:49 2'
    flnm.strip(':')                # i want to get '2011092723492', ':' for starters, but...
    print 'check2: ', flnm         # nothing... '2011.09.27 23:49 2'
    string.strip(flnm,':')
    print 'check3: ', flnm         # nothing... '2011.09.27 23:49 2'
    flnm = flnm.strip(':')
    print 'check4: ', flnm         # nothing... '2011.09.27 23:49 2'
    flnm.replace(':', '')
    print 'check5: ', flnm         # nothing... '2011.09.27 23:49 2' 

спасибо большое!

Ответы [ 5 ]

3 голосов
/ 30 сентября 2011

Попробуйте это:

import re
flnm = re.sub('[^0-9]', '', flnm)
3 голосов
/ 30 сентября 2011

Это не то, что делает str.strip(), и это не так.Строки являются неизменяемыми, поэтому результат возвращается из метода.

flnm = flnm.replace(':', '')

Повторите с другими символами, которые вы хотите удалить.

2 голосов
/ 30 сентября 2011

В Python обычно есть несколько способов сделать это.

Но сначала strip работает не так, как вы думаете.

>>> flnm = '2011.09.27 23:49 2'
>>> flnm.strip('2') # notice that strip only affects the ends of the string
'011.09.27 23:49 '

Вы могли быприсоединяйтесь к персонажам, которые не отклонены.

rejected = ' :.'
flnm = ''.join(c for c in flnm if c not in rejected)

Или просто объединить цифры.

flnm = ''.join(c for c in flnm if c.isdigit())

Или объединить несколько вызовов в string.replace.

flnm = flnm.replace(' ','').replace('.','').replace(':','')

Или использовать re.sub.

import re
flnm = re.sub('\D', '', flnm)

Поскольку строки неизменяемы, убедитесь, что вы присваиваете результат обратно flnm.

Редактирование:

Еще больше способовсделай это!

Используя reduce (из ответа Ивана):

rejected = ' :.'
flnm = reduce(lambda a, d: a.replace(d,''), rejected, flnm)

Используя translate (из ответа Oxtopus):

rejected = ' :.'
flnm = flnm.translate(None, rejected)

Я предпочитаю использовать у Oxtopus translate, так как это наиболее прямолинейно.

2 голосов
/ 30 сентября 2011

Это довольно быстро (если вы хотите удалить из строки те известные не-альфа-символы):

flnm.translate(None, ' .:')
0 голосов
/ 30 сентября 2011
res = reduce( lambda a, d: a.replace(d,''),[':','.',' '],flnm)
...