После парсинга html-страниц появляется и мусор. Например, как убрать ненужные переносы строк, объединить текстовые фрагменты списков..., сначала надо пробовать "простейших" (быстрые встроенные функции и ...типы...) join(),map(), replace(),str.rstrip()... а уж потом пускаться во все тяжкие с regexp. Поэтому здесь примеры с простейшими и только ссылки для изучения regexp.
Две части пособия с Хабра, два онлайн сервиса отладки, Справочник Python, ходовые примеры от Гугла
Some people, when confronted with a problem, think «I know, I'll use regular expressions.» Now they have two problems.
2. Built-in Functions - Простейшие
5. Built-in Types - методы строк и других встроенных типов
7.1. string — Common string operations
Python: replace characters in string
python s.replace
Trimming a string in Python?
7.2.1. Regular Expression Syntax
Регулярные выражения, .replace('\n',''). Часть 1
Регулярные выражения, пособие для новичков. Часть 2 перевод
Примеры регулярных выражений
regexr.com
rubular.com
L = ['L','O','L']
makeitastringdammit = ''.join(map(str, L))
makeitastringdammit
str.join(iterable) Return a string which is the concatenation of the strings in the iterable iterable. The separator between elements is the string providing this method.
map(function, iterable, ...) Apply function to every item of iterable and return a list of the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. If one iterable is shorter than another it is assumed to be extended with None items. If function is None, the identity function is assumed; if there are multiple arguments, map() returns a list consisting of tuples containing the corresponding items from all iterables (a kind of transpose operation). The iterable arguments may be a sequence or any iterable object; the result is always a list.
Если в спискцифры, то их сначала надо перевести в строки:
>>> L1 = [1,2,3]
>>> " ".join(str(x) for x in L1)
list1 = ['1', '2', '3']
str1 = ''.join(list1)
str1
Как убрать пробелы в начале и (только) в конце строки¶
sspace=" 1234 dddd "
sspace, sspace.strip(), sspace.rstrip()
str.rstrip([chars]) Return a copy of the string with trailing characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a suffix; rather, all combinations of its values are stripped:
will remove all the leading and trailing whitespace characters such as \n, \r, \t, \f, space.
Как убрать любые символы в начале и конце строки¶
strip is not limited to whitespace characters either:
# remove all leading/trailing commas, periods and hyphens
',,,-wo... - woow \n---,'.strip(',.-')
',,,-wo... - woow \n---,'.strip(',.-').strip()
'mississippi'.rstrip('ipz')
myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]
for phrase in myphrases:
print phrase.strip()
' Hello \n'.strip() # ALL spaces at ends removed
#If you need only to remove one space however, you could do it with:
def strip_one_space(s):
if s.endswith(" "): s = s[:-1]
if s.startswith(" "): s = s[1:]
return s
strip_one_space(" Hello ")
Also, note that str.strip() removes other whitespace characters as well (e.g. tabs and newlines). To remove only spaces, you can specify the character to remove as an argument to strip, i.e.:
" Hello\n".strip(" ")
Убрать перенос строки в списке removing-unwanted /n¶
readlines returns an iterator, not a list, and you can therefore not use index to get an element. Iterate over the iterator with i.e. a list comprehension and it works.
f=['Kiruna\n', 'setaim=0\n', '23\n', '34\n', '20\n', '1\n', '1\n', '20\n']
content = [x.rstrip() for x in f]
content
Замена подстроки в строке¶
string.replace(s, old, new[, maxreplace]) 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.
" 1234 dddd ".replace('d','',1) # only 1 replace
str.translate(table[, deletechars]) Return a copy of the string where all characters occurring in the optional argument deletechars are removed, and the remaining characters have been mapped through the given translation table, which must be a string of length 256.
You can use the maketrans() helper function in the string module to create a translation table. For string objects, set the table argument to None for translations that only delete characters:
'read this short text'.translate(None, 'aeiou')
>>> s = "asjo,fdjk;djaso,oio!kod.kjods;dkps"
>>> s.translate(None, ",!.;")
#'asjofdjkdjasooiokodkjodsdkps'
Как преобразовать строку в список¶
Есть даже возможности получить список (итератор) слов... из строки
Пример с BMW¶
Это пример из жизни. Во второй части "пособия для новичков" я случайно прочитал, что лучше использовать встроенные функции... ВМЕСТО регулярных выражений.
bmw=["\n BMW 3\n седан\n ","3/f30_31/sedan/index.html","1,398,000\n\r"]
[car.rstrip() for car in bmw]
[car.replace('\n','').replace(',','').strip() for car in bmw]
stripper = str.strip
>>> map(stripper, "QVOD, Baidu Player".split(","))
#['QVOD', 'Baidu Player']
dir(str)
help(str.splitlines)
Note urllib also exposes certain utility functions like splittype, splithost and others parsing url into various components. But it is recommended to use urlparse for parsing urls than using these functions directly. Python 3 does not expose these helper functions from urllib.parse module.
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий