Как парсить строку python

How to parse a string in python

Without any 3rd party libraries (such as beautiful soup) what is the cleanest way to parse a string in PYTHON. Given the text below I’d like the content of «uber_token» be parsed out ie. «123456789» .

do you need to tokenize all the elements and attributes or simply extract the value=»XXX» part? If its just the latter, use a regex.

just need the value=»xxx». But there are multiple instances of value=»**» which may have a different associated name.

If the attributes and their ordering is consistent in every element you can use a regex for that, but why are you averse to using a library?

If each is one per line. Then you can just seatch for name and parse the two quotations after. If its equal to uber_token then find value and parse between the two quotations after.

3 Answers 3

regular expression is the solution.

>>> import re >>> s = '>> regex=re.search(r'name="uber_token" value="(1+)"',s) >>> print regex.group(1) 123456789 

Disclaimer: This answer is for quick-and-dirty scripts, and may lack in robustness and efficiency. Suggestions here should probably not be used for code that survives more than a few hours.

If you’re unwilling to learn regex (and you should be willing to learn regex!), you can split on value ‘) for s in candidates[1:]: #the first token is not a value try: #test if value is a number val = int(s.split(‘»‘)[0]) except: continue values.append(val)

Читайте также:  Php готовый скрипт авторизация

If you’re specifically looking at HTML or XML, Python has libraries for both.

Then, for example, you can write code to search through the tree for a node with an attribute «name» that has value «uber_token», and get the «value» attribute from it.

Very dumb Python 2 example that doesn’t require learning too much about ElementTree s (may need simple corrections):

import xml.etree.ElementTree as ET tree = ET.parse('myfile.xml') root = tree.getroot() values = [] for element in root: if element.attrib['name'] == 'uber_token': values.append(element.attrib['value']) 

Источник

10 приемов для преобразования и декомпозиции строк в Python

В этой статье мы рассмотрим некоторые приемы для парсинга и токенизации строк в Python.

Никто не может отрицать важность анализа текста и синтаксического анализа строк. Он применяется практически во всех направлениях разработки программного обеспечения, от парсинга URL-адресов до обработки естественного языка. Мы не будем описывать все возможные его применения — это выходит далеко за рамки одной статьи. Но о некоторых базовых методах работы со строками и токенами в Python мы расскажем.

Эти маленькие скрипты следует рассматривать как строительные блоки для приложений для анализа текста и предварительной обработки данных. Знание основ очень важно для дальнейшего развития.

А теперь давайте перейдем к нашему списку!

1. Translate и Replace

Первый случай — заменить или удалить некоторые символы или подстроки из текста. В Python есть встроенные функции в модуле string, которые выполняют эти задачи.

Метод translate() использует таблицу (которая строится при помощи функции maketrans ) для удаления или изменения определенных символов:

test_string = 'The quick brown fox jumps over the lazy dog' translation_map = str.maketrans('eo', ' ') test_string.translate( translation_map ) Out[1]: 'Th quick br wn f x jumps v r th lazy d g'

Метод replace() работает так, как следует из его названия — изменяя подстроку на нужную:

test_string = 'The quick brown fox jumps over the lazy dog' test_string.replace( 'fox', 'squirell') Out[2]: 'The quick brown squirell jumps over the lazy dog'

2. Очистка строки

Теперь мы можем применить информацию из предыдущего пункта для очистки строки. Это один из наиболее востребованных процессов в проектах data science при очистке данных. Отличный пример — это необработанный текст с пробельными символами и переносами строк. Вот простой скрипт для очистки такой строки:

test_string_with_garbage = 'The quick brown fox\njumps\tover the\tlazy dog\r\n' character_map = < ord('\n') : ' ', ord('\t') : ' ', ord('\r') : None >test_string_with_garbage.translate(character_map) Out[3]: 'The quick brown fox jumps over the lazy dog '

3. Разбиение строки

Для анализа текста требуются различные метрики, такие как количество слов, количество символов, средняя длина предложения. Чтобы вычислить эти значения, нам нужно подготовить текст — очистить и разделить. К счастью для нас, в Python есть несколько встроенных функций для разделения текста:

test_string.split() Out[1]: ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
test_string.split(' ', 2) Out[2]: ['The', 'quick', 'brown fox jumps over the lazy dog']
test_string.rsplit(' ', 2) Out[3]: ['The quick brown fox jumps over the', 'lazy', 'dog']
test_string.split('e') Out[4]: ['Th', ' quick brown fox jumps ov', 'r the lazy dog']
test_string.partition('fox') Out[5]: ('The quick brown ', 'fox', ' jumps over the lazy dog')

4. Strip и zfill

Еще одна важная функция — это возможность удалять из строки лишние начальные и конечные символы. Для этого у нас есть семейство функций strip() :

  • Удалить пробелы по умолчанию.
  • Удалить пробелы слева или справа.
  • Удалить произвольные символы.
test_string_with_spaces = ' The quick brown fox jumps over the lazy dog ' test_string_with_spaces.strip() Out[1]: 'The quick brown fox jumps over the lazy dog' test_string_with_spaces.lstrip() Out[2]: 'The quick brown fox jumps over the lazy dog ' test_string_with_spaces.rstrip() Out[3]: ' The quick brown fox jumps over the lazy dog' test_string.rstrip('g') Out[4]: 'The quick brown fox jumps over the lazy do'

Кроме того, есть полезная функция для дополнения чисел ведущими нулями:

'29'.zfill(10) Out[1]: '0000000029' 'xA1'.zfill(4) Out[2]: '0xA1'

5. Деконструкция и реконструкция

Для генерации текста необходимо построить предложения и фразы из словаря слов. Этот процесс обратный разделению строки. Python позволяет нам использовать встроенный строковый метод join() для объединения слов обратно в предложение:

test_array = test_string.split() # ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog'] ''.join(test_array) Out[1]: 'Thequickbrownfoxjumpsoverthelazydog' ' '.join(test_array) Out[2]: 'The quick brown fox jumps over the lazy dog'

6. Удаление знаков препинания

Это еще один случай очистки текста. Модуль string в Python имеет множество встроенных констант с отдельными наборами символов. string.punctuation — один из них, поэтому мы будем использовать его для очистки строки.

test_punctuation = " This &is [an] example? string. with.? punctuation. " import string test_punctuation.translate(str.maketrans('', '', string.punctuation)) Out[1]: 'This is an example of string with punctuation'

7. Работа с регистрами

Форматирование текста — это боль каждого data scientist’а. Слова и предложения в разных форматах создают много проблем при очистке данных. Однако и для этих задач в Python есть нужные функции:

test_string.lower() Out[1]: 'the quick brown fox jumps over the lazy dog' test_string.upper() Out[2]: 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG' test_string.title() Out[3]: 'The Quick Brown Fox Jumps Over The Lazy Dog' test_string.title().swapcase() Out[4]: 'tHE qUICK bROWN fOX jUMPS oVER tHE lAZY dOG' test_string.title().swapcase().capitalize() Out[5]: 'The quick brown fox jumps over the lazy dog'

8. Мир регулярных выражений

Иногда непросто очистить текст с помощью определенных символов или фраз. Вместо этого нам необходимо использовать некоторые шаблоны. И здесь нам на помощь приходят регулярные выражения и соответствующий модуль Python.

Мы не будем обсуждать всю мощь регулярных выражений, а сосредоточимся на их применении — например, на разделении и замене данных. Да, эти задачи были описаны выше, но вот более мощная альтернатива.

import re test_punctuation = " This &is [an] example? string. with.? punctuation. " re.split('\W+', test_punctuation) Out[1]: ['This', 'is', 'an', 'example', 'of', 'string', 'with', 'punctuation', '']
import re test_with_numbers = "This is 1 string with 10 words for 9 digits 2 example" re.sub('\d', '*', test_with_numbers) Out[1]: 'This is * string with ** words for * digits * example'

9. Токенизация строки

Пришло время собрать все трюки, которые мы узнали ранее, и применить их для настоящей токенизации. Однако мы не будем повторять весь код. Вот пример довольно классной альтернативы с использованием pandas. В нашем примере мы должны очистить строку от лишних символов, привести к одному регистру и разбить ее на токены.

import pandas as pd test_punctuation = " This &is [an] example? string. with.? punctuation. " data = pd.DataFrame([test_punctuation]) data.iloc[0].str.lower().str.replace('\W+', ' ').str.strip().str.split() Out[1]: [this, is, an, example, of, string, with, punctuation] Name: 0, dtype: object

10. Поиск подстроки

Перед выполнением любой задачи по очистке мы должны определить, действительно ли она нужна. В большинстве случаев вопрос сводится к поиску какого-либо символа или фразы в тексте. Python предоставляет множество функций для наших целей.

test_string.endswith('dog') Out[1]: True
test_string.startswith('dog') Out[2]: False
'fox' in test_string Out[3]: True
test_string.find('fox') Out[4]: 16

Конечно, любую задачу можно решить множеством способов, особенно если мы говорим о Python. Однако мы думаем, что наше видение синтаксического анализа строк будет для вас полезным.

Источник

Оцените статью