создать список, буквально используя строку - PullRequest
1 голос
/ 09 апреля 2020

Почему-то у меня есть текстовый файл, описывающий списки регулярных выражений

RegexRemove      = [ 'OC1.*','OC2.*','-UC.*','EG[0-9]{4,6}.*','_t[0-9]{0,2}\.[0-9]{0,2}$' ]

RegexReplace     = [ ['LA.*','LA'],['IF.*', 'IF'],['BH.*', 'BH'],['DP.*', 'DP'] ]

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

Строка похожа на исходный код, определяющий список, но она является частью большого текстового файла, который не может быть прочитан и интерпретирован как python.

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Извлеките нужные строки (очевидно, вы уже сделали это), разделите их на символе '=', а затем передайте вторую часть ast.literal_eval():

>>> import ast
>>> s = "[ 'OC1.*','OC2.*','-UC.*','EG[0-9]{4,6}.*','_t[0-9]{0,2}\.[0-9]{0,2}$' ]"
>>> ast.literal_eval(s)
['OC1.*', 'OC2.*', '-UC.*', 'EG[0-9]{4,6}.*', '_t[0-9]{0,2}\\.[0-9]{0,2}$']
>>> 
0 голосов
/ 09 апреля 2020

Вы можете использовать eval для разбора строки как python объектов:

items = eval('[1,2,4]')
print(type(items),len(items), items) # output: <class 'list'> 3 [1, 2, 4]

...