Различение строк в списке только с пробелами - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь создать оператор if, который может различать две строки в списке, где единственная разница - это количество пустого пространства перед ними.

По какой-то причине я не могу заставить ни одну из них работать.

with open(os.path.dirname(os.path.realpath(__file__)) + "\defaults\handling.meta") as file:
contents = file.readlines()

for index, item in enumerate(contents):
    if ("    </Item>" in item) and (index > old_start_lines[0]):

Это не делает различия между

        </Item>

(8 пробелов) и

    </Item>

(4 пробела).Добавление проверки длины следующим образом приводит к ошибке:

    and (len(contents[index]) == 11):

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

    if (item.startswith("    </Item>")) and (index > old_start_lines[0]):
    if ("    </Item>" == item) and (index > old_start_lines[0]):

Ошибка:

IndexError: индекс списка вне диапазона

Вот пример текстового файла -> списка, из которого я работаю: https://pastebin.com/Vr87UXHF

Спасибо,

Альфи

Редактировать: Полный проект - https://drive.google.com/file/d/1hcs1zkAu5xBWJYhZ97UXUcEkPdo-yQ4m/view?usp=sharing

Ответы [ 2 ]

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

Вам нужно Python re для точного совпадения пробелов с регулярным выражением.

import re
with open('FilePath') as file:
contents = file.readlines()
regex = re.compile(r"^\s{8}<\/Item>")
#for 4 spaces you can replace 8 with 4


for index, item in enumerate(contents):
    if (bool(regex.search(item))):
        print (item)
        print('</Item> with 8 spaces')

Вывод:

        </Item>

</Item> with 8 spaces
0 голосов
/ 23 сентября 2018

Один из способов легко исправить это - убрать пробелы слева от входной строки:

if ("</Item>" in item.lstrip())

Вы также можете использовать .strip () или .rstrip (), см. https://docs.python.org/2/library/string.html#string.lstrip

...