Поиск по блогу

воскресенье, 22 февраля 2015 г.

Здесь примеры кода для методов, которые я использую для чистки строк и строк - элементов списка

Вот большая часть примеров: filter(None, infi.split(' ')) map(str.strip, finfi) ' '.join(mystring.split()) mystring.replace('mess','',[n,m]) str.translate(table[, deletechars]) Это только те, которые я использовал. Но есть еще много других возможностей. Их надо искать по ссылкам на документацию... Часть сылок не наверху (как обычно), а ниже в тексте...

In [2]:
infi ="Infiniti                               1 304    1 551    -16%  833                     926                        -10%"
In [3]:
infi.split('  ')
Out[3]:
['Infiniti',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 ' 1 304',
 '1 551',
 '',
 '-16%',
 '833',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 ' 926',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '',
 '-10%']
In [4]:
filter(None, infi.split('  '))
Out[4]:
['Infiniti', ' 1 304', '1 551', '-16%', '833', ' 926', '-10%']

Как перебрать все элементы списка и для каждого выполнить определенную функцию

Сначала пробуем ошибочный вариант

In [6]:
filter(None, infi.split('  '))
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-6-be380bcfaca9> in <module>()
----> 1 filter(None, infi.split('  ').strip())

AttributeError: 'list' object has no attribute 'strip'

Потом находим сфункцию map(), которая, собственно, и предназначена именно для этой цели: принимает два параметра впереди функция, на втором месте iterable. Соответственно, функция может быть довольно сложной...

In [7]:
finfi = filter(None, infi.split('  '))
In [16]:
map(str.strip, finfi)
Out[16]:
['Infiniti', '1 304', '1 551', '-16%', '833', '926', '-10%']

Здесь мы в качестве функции используем метод str.strip ...Надо запомнить этот прием, здесь мы в качестве объекта используем встроенный str

Возможен еще один "хитрый" способ c прямым вызовом for...

In [8]:
print([i.strip() for i in finfi])
['Infiniti', '1 304', '1 551', '-16%', '833', '926', '-10%']

А какие еще приемы и методы можно использовать для чистки парсенных строк

Я уже умею (использовал)

In []:
' '.join(mystring.split())   #- убираем лишние пробелы из mystring
'","'.join(mystring.split()) #- заменяем пробелы на "," и кавычки
In []:
mystring.replace('mess','',[n,m]) #- убираем (или) заменяем  мусор
In [21]:
#mystring.strip()
'www.example.com'.strip('cmowz.')
Out[21]:
'example'
In [22]:
# str.translate(table[, deletechars])
'read this short text'.translate(None, 'aeiou')
Out[22]:
'rd ths shrt txt'

from string import maketrans

intab = "aeiou" outtab = "12345" trantab = maketrans(intab, outtab)

str= "this is string example...wow!!!"; print str.translate(trantab);

In [25]:
intab = "aeiou"
outtab = "1234"
trantab = maketrans(intab, outtab)
str.translate(trantab);
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-25-470ba0b9044b> in <module>()
      1 intab = "aeiou"
      2 outtab = "1234"
----> 3 trantab = maketrans(intab, outtab)
      4 str.translate(trantab);

ValueError: maketrans arguments must have same length
In [26]:
deletetab = "!w"
mystr= "this is string example...wow!!!"
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)

mystr.translate(trantab, deletetab)
Out[26]:
'th3s 3s str3ng 2x1mpl2...4'

Delete all characters from s that are in deletechars (if present), and then translate the characters using table, which must be a 256-character string giving the translation for each character value, indexed by its ordinal. If table is None, then only the character deletion step is performed.

Запомним последовательность, сначала стираются, а потом оставшиеся заменяются. Причем, стереть можно сразу несколько ненужных символов (в отличие от replace())

In [27]:
mystr.translate(None, deletetab)
Out[27]:
'this is string example...o'

Таким образом, можно просто убрать из строки несколько символов.

Return a copy of string s with all occurrences of substring old replaced by new. If the optional argument maxreplace is given, the first maxreplace occurrences are replaced.



Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий