Обходной путь для проблемы с s.lstrip () - PullRequest
0 голосов
/ 11 сентября 2018

Я читаю xml-файл, содержащий строки типа:

<PLAYER_NAME>Andrew Tell</PLAYER_NAME>

Я хочу извлечь все имена из файла, и я попытался:

name = (line.strip()
        .lstrip('<PLAYER_NAME>')
        .rstrip('</PLAYER_NAME>'))

и

name = line.strip()
name = name.lstrip('<PLAYER_NAME>')
name = name.rstrip('</PLAYER_NAME>')

Они работают для некоторых имен, но если имя начинается с любого из: A, E, L, M, N, R, Y (и, возможно, некоторых других), то этот символ также удаляется.так что в приведенном выше примере я получаю 'Andrew Tell', но Уильям Телль в порядке.Я не проверял полный алфавит, но я знаю, что имена, начинающиеся с любого из: B, C, D, H, I, J, S, T, W, все извлечены правильно

Мне пришлосьприбегнуть к уродливому:

namebits = line.split('>',1)
name = namebits[-1].split('<')[0]

Кажется, это работает для всех имен.

У меня известная проблема с s.lstrip или я что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Использовать синтаксический анализатор XML для XML.Любой другой подход не работает.

К счастью, в Python встроен синтаксический анализатор XML, и использовать его легко.Скорее всего, это проще, чем ваш текущий код.

import xml.etree.ElementTree as ET

tree = ET.parse('your_file.xml')

player_name = tree.find('.//PLAYER_NAME')    
print(player_name.text)

Чтение файла, поиск элемента , получение текста.Не требуется неудобных манипуляций со строками.Предполагая, что этот XML-файл:

<PLAYER>
    <PLAYER_NAME>Andrew Tell</PLAYER_NAME>
</PLAYER>

, вывод неудивителен:

Andrew Tell
0 голосов
/ 11 сентября 2018

Согласно документам функции strip принимают строку и удаляют все начальные / конечные символы, которые являются частью этой строки - это означает, что аргумент на самом деле представляет собой список символов, а не один строка. Например:

>'abababababbbaaabbbcdea'.lstrip('ab')
'cdea'

Я не вижу реальной проблемы с вашим рабочим решением. Рабочие решения бесконечно «красивее», чем нерабочие. Вы можете использовать анализатор библиотеки для всего, что вы читаете, для наиболее передового (и надежного) решения. Например, для простого парсера XML xml поставляется с Python, но не забудьте прочитать предупреждение вверху.

...