python анализирует и получает больше входных данных из строки

#python

#python

Вопрос:

Мне нужно проанализировать текстовый файл, получить выходные данные и добавить их в список.

     with open(qwer.txt, 'r') as my_file:
        a = my_file.readlines()
        for line in a:
            for part in line.split():
                if "color=" in part:
                    p1 = part.split('=')[1] 
                    print(p1)
                    list1 = []  
                    p1.append(list1)
  

итак, у меня есть строка, в которой у меня есть два / более «color =» в одной строке, и мне нужен вывод, чтобы получить оба цвета:

мой цвет = красный и мой цвет = зеленый

мой желаемый результат:

 red
green
  

и мне нужно добавить их в список отдельно как [‘red’, ‘green’] . пожалуйста, помогите! ответы будут оценены.

Ответ №1:

Вы, конечно, можете использовать регулярное выражение:

 import re
str = "my color=red and my color=green"
p = r'color=([a-z] )'
x = re.findall(p, str)
  

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

1. мне нужно добавить в список, как я должен это сделать?

2.@adarshram Переменная x БУДЕТ представлять собой список. Вы можете прочитать об этом re.findall() здесь

3. как я должен открывать свои файлы и выполнять эту операцию быстрее, чем один str

4. @adarshram После for line in a: используйте line вместо str

Ответ №2:

Ваше решение почти правильное, вы печатаете правильные строки. Вот как сохранить их в список:

 result = []
with open('qwer.txt') as my_file:
    for line in my_file:
        for part in line.strip().split():
            if "color=" in part:
                p1 = part.split('=')[1] 
                result.append(p1)
  

Если вам нужен список списков, сделайте это следующим образом:

 result = []
with open('qwer.txt') as my_file:
    for line in my_file:
        values = []
        for part in line.strip().split():
            if "color=" in part:
                p1 = part.split('=')[1] 
                values.append(p1)
        if values:
            result.append(values)
  

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

1. Я бы сделал line.strip().split() , я сомневаюсь, что он хочет «red n» в своем списке.

2. Действительно, добавлено .strip() .

Ответ №3:

Возможно, вы можете сделать это без регулярных выражений:

 parts = itertools.chain.from_iterable(line.split() for line in my_file)
colors = [part.split('color=')[1] for part in parts if part.startswith('color=')]
  

Хотя регулярное выражение, похоже, подходит здесь лучше всего.

Ответ №4:

Скорее всего, нам следует избегать использования групп. Вы могли бы получить значение color через lookbehind,

 >>> import re
>>> str = 'my color=red and my color=green'
>>> m = re.findall('(?<=color=)S ', str)
>>> m
['red', 'green']