Я новичок в 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
Мне нужна помощь в их разделении. Я опубликовал всю проблему полностью, чтобы получить предложения о других более эффективных и разумных способах выполнения этой задачи.
Вы можете использовать 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
Используйте модуль аст, чтобы преобразовать ваш строковый 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']
Спасибо. Даже не знал о модуле. Очень помогло.
Вот еще один способ сделать это, разбив его на несколько списков:
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']
Интересно. Спасибо, что нашли время.