将数据从文件转换为结构化格式(python)

将数据从文件转换为结构化格式(python),python,python-3.x,parsing,Python,Python 3.x,Parsing,我刚刚开始用Python编写小程序,所以我的经验水平很低。目前,我正试图用Python3将文件读入数据结构,但我不知道如何快速且易于理解 首先,我必须解释文件的内容。有标题,下面的行是属于标题的附加信息 Booklist.txt Programming---------------- Python Cookbook Python in a nutshell Recipes-------------------- Slow Cooking Clean Eating Low Carb Sports-

我刚刚开始用Python编写小程序,所以我的经验水平很低。目前,我正试图用Python3将文件读入数据结构,但我不知道如何快速且易于理解

首先,我必须解释文件的内容。有标题,下面的行是属于标题的附加信息

Booklist.txt

Programming----------------
Python Cookbook
Python in a nutshell
Recipes--------------------
Slow Cooking
Clean Eating
Low Carb
Sports---------------------
Mastering Mountain Bike Skills
我的想法是有一个这样的结构:

{'Programming': ['Python Cookbook', 'Python in a nutshell'],
 'Recipes': ['Slow Cooking', 'Clean Eating', 'Low Carb'], ... }
到目前为止,我做了一些似乎有效的事情:

f = open('Booklist.txt')
myDict = dict()
for ind, line in enumerate(f):
    match = re.search(r"(^[\w ]+)([-]+)$", line)
    if match is not None:
        category = match.group(1)
        myDict[category] = []
    else:
        myDict[category].append(line)
f.close()

但是我能用索引做什么呢?我可以用它对钥匙进行任何排序吗?字典是未排序的,对吗?

这可能有些过分,但是您可以使用python PEG解析器来解析
booklist.txt
。学习PEG语法需要一些时间,但是使用已建立的库编写健壮的代码要比自己完成所有工作容易得多

基本用法:

from parsimonious.grammar import Grammar
grammar = Grammar(
  """
  body       = ( category '\n' name+ '\n' ) +
  category   =  name '-'+
  name       = ~"[a-zA-Z]*"i
  """)

with open('booklist.txt','r') as f:
  ast = grammar.parse(f.read())

print( ast )
之后,请更新问题
是的,dict是未排序的。如果要保留原始订单,请使用。另外,如果匹配不是无:可以简化为
如果匹配:

确定。到目前为止你试过什么?请您的问题显示您的代码、您获得的任何输出以及任何错误或回溯的全文。堆栈溢出不是代码写入服务。提示:您可以使用中的
操作符检查某个字符串是否包含在另一个字符串中。例如,“abcd”
中的
“a”将返回
True
。请注意
如果匹配不为无:
等于
如果匹配
对于被否决的人:当我开始写文章时,SO还没有提供任何代码,也没有提供问题。