Разделитель в выводе после фильтра регулярных выражений в списке

Я новичок в Python, так что терпите меня, пожалуйста.

У меня есть список-

print(listoffiles)
["{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n"]

Мне нужно только имя файла из этого списка,

0_HONOR_1524204351030, 0_HONOR_1524204351030,0_HONOR_1524204351030

Я сначала так разделил -

listoffiles=[i.split(":")[0] for i in listoffiles]
print(listoffiles)
["{'0_HONOR_1524204351030'", "{'0_HONOR_1524204351030'", "{'0_HONOR_1524204351030'"]

а затем присоединяйтесь к нему-

listoffiles=(','.join(str(f) for f in listoffiles))
print(listoffiles)
{'0_HONOR_1524204351030',{'0_HONOR_1524204351030',{'0_HONOR_1524204351030'

Вот, я попытался его раздеть-

listoffiles=(str(listoffiles).strip("'{'"))
print(listoffiles)
0_HONOR_1524204351030',{'0_HONOR_1524204351030',{'0_HONOR_1524204351030'

Казалось, это работает только для первого элемента, поэтому я тоже попробовал это -

listoffiles=(str(f).strip("'{'") for f in listoffiles)
print(listoffiles)
<generator object <genexpr> at 0x7fda38837460>

Поскольку это тоже не сработало, я попробовал с регулярными выражениями -

regex = re.compile(r'^[a-zA-Z0-9_]*$')
newlistoffiles=filter(regex.match,listoffiles)

Казалось, что это сработало, но я не могу разделить вывод -

0_HONOR_15242043510300_HONOR_15242043510300_HONOR_1524204351030

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
64
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать split для разделения данных:

#!/usr/bin/env python

Data = ["{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n"]

for i in Data:
    i = i.strip()
    i = i[2:]
    i = i[0:i.index("'")]
    print(i)

Напечатаем:

0_HONOR_1524204351030
0_HONOR_1524204351030
0_HONOR_1524204351030
0_HONOR_1524204351030
0_HONOR_1524204351030

Интересно. Спасибо, что нашли время.

Krishangi Goswami 03.05.2018 06:50
Ответ принят как подходящий

Используйте модуль аст, чтобы преобразовать ваш строковый dict в python dict и использовать keys() для требуемого ключа.

Бывший:

import ast
listoffiles = ["{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n", "{'0_HONOR_1524204351030': 'NEW'}\n"]
listoffiles = map(ast.literal_eval, listoffiles)
print([i.keys()[0] for i in listoffiles])

Выход:

['0_HONOR_1524204351030', '0_HONOR_1524204351030', '0_HONOR_1524204351030', '0_HONOR_1524204351030', '0_HONOR_1524204351030']

Спасибо. Даже не знал о модуле. Очень помогло.

Krishangi Goswami 03.05.2018 06:45

Вот еще один способ сделать это, разбив его на несколько списков:

all_strs = [j for i, j in enumerate(lst)]

#assumes that this string format will remain constant
lsts = [list(all_strs[i])[2:23] for i, j in enumerate(all_strs)]

keys = [''.join(j) for i, j in enumerate(lsts)]
print(keys)

['0_HONOR_1524204351030',
'0_HONOR_1524204351030',
'0_HONOR_1524204351030',
'0_HONOR_1524204351030',
'0_HONOR_1524204351030']

Другие вопросы по теме