#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']