#!/usr/bin/python3
import re
# здесь спрятана вся магия. Не пытайтесь это прочитать, можно что то вызывать
regex = r"(\['([^]]+)'\]|\('([^)]+)'\))"
r = []
f = open("data.txt")
# читаем файл построчно
for l in f:
# тут будет улов с текущей строки
sb = []
matches = re.findall(regex, l)
# если ничего не нашли - то и делать нечего
if len(matches) == 0:
continue
# по всем найденным кусочкам смотрим
for x in matches:
# у нас там два варианта, поэтому проверяем, где зарылся бегемот
if (x[1] == ''):
sb.append(x[2])
else:
sb.append(x[1])
# и добавляем найденный массив в больший
r.append(sb)
# осталось по мелочам - распечатать это все дело.
print(r)
如果文件的行只包含示例中指示的选项(每行有两行),那么一切都可以大大简化
#!/usr/bin/python3
import re
regex = r"(\['([^]]+)'\]\s*\('([^)]+)'\))"
r = []
f = open("data.txt")
for l in f:
matches = re.findall(regex, l)
if len(matches) == 0 or len(matches[0]) != 3:
continue
r.append([matches[0][1], matches[0][2]])
print(r)
s = '''\
['строка1'] ('текст1')
['строка2'] ('текст2')
['строка3'] ('текст3')
'''
l = [[eval(i.split()[0])[0], eval(i.split()[1])] for i in s.split('\n') if i]
print(l)
# [['строка1', 'текст1'], ['строка2', 'текст2'], ['строка3', 'текст3']]
也许像这样的地方
如果文件的行只包含示例中指示的选项(每行有两行),那么一切都可以大大简化
有些人可能会建议使用“pythonic-way”,但它对“一次性任务”有好处。
KoVadim上面有一些复杂的答案。在我看来,解析起来可能会更容易一些。
简单的方法