Отказ от ответственности: это решение не для слабонервных и на самом деле не расставляет приоритеты читаемости.
Я немного заинтригован тем, что ни один из опубликованных в настоящее время ответов не решает эту проблемуна .split("[country]")
. Вот решение для понимания списка без использования циклов for
:
# read file this way to preserve line structure:
with open('data.txt', 'r') as f:
data = f.read().strip().split("\n")
# First: move the "[country]" tag from behind to in front of the name.
# Also, I replace "[country]" with "*" for no other reason than that it's shorter
data = ",".join(["*"+x.replace("[country]","") if x.endswith("[country]") else x for x in data])
# Then, split on "[country]", that is: ",*",
# But keep in mind that the very first country will have prefix "*", not ",*"
data = [x.replace("*","").split(",") for x in data.split(",*")]
print(data)
#[['Pakistan', 'Karachi', 'lahore', 'islamabad'], ['UAE', 'dubai', 'sharjah'], ['India', 'goa', 'chennai']]
Затем, если вы можете изменить формат файла данных таким образом, чтобы тег [country]
был установлен вперед названием страны, а не после, тогда это немного проще, и вы получите простой однострочный:
with open('data2.txt', 'r') as f:
data = f.read().strip().split("[country]")
data = [x.strip().replace("[country]","").split("\n") for x in data[1:]]
print(data)
#[['Pakistan', 'Karachi', 'lahore', 'islamabad'], ['UAE', 'dubai', 'sharjah'], ['India', 'goa', 'chennai']]