猿问

将文本文件转换为以空行作为唯一分隔符的字典

您好我正在尝试将文本文件转换为字典,但我的分隔符是一个空行。因此,我的部分数据的示例dummy.txt如下所示:


Lorem ipsum dolor sit amet (consectetur adipiscing elit)

2020-01-05 20:01:02

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet 

Lorem ipsum dolor sit amet


Lorem ipsum dolor

2019-01-30 12:21:50 

Lorem ipsum Lorem ipsum 

Lorem ipsum Lorem ipsum 

Lorem ipsum Lorem ipsum Lorem

所以基本上它以一个名称(有时包括括号)开头,然后是日期和时间(按照上面的格式),然后是任何附加信息(可以是任意长度,也就是行数,但包含诸如“ /“ 和 ”,”)。最后,它将是一个空行,表示第一组数据的结尾。


所以我需要它看起来像,以字典形式,是这样的:


{'Lorem ipsum dolor sit amet (consectetur adipiscing elit)':'2020-01-05 20:01:02 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet','Lorem ipsum dolor':'2019-01-30 12:21:50 Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem'}

我试过使用这样的代码,因为除了“\n”之外,我想不出任何其他代表空行分隔符的东西,但我知道它是错误的,因为它也会影响同一组中的其他数据\n:


d = {}

with open("dummy.txt") as f:

    for line in f:

        (key, val) = line.split('\n')

        d[key] = val


print (d)

任何帮助将不胜感激!先感谢您


慕斯王
浏览 89回答 2
2回答

红糖糍粑

你快到了,你需要用双换行符拆分整个文件,然后键是该组中的第一行,而 val 是所有其他行。d = {}with open("dummy.txt") as f:    for group in f.read().split('\n\n'):      key, *val = group.split('\n')      d[key] = ' '.join(val)print (d)结果:{'Lorem ipsum dolor sit amet (consectetur adipiscing elit)': '2020-01-05 20:01:02 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet  Lorem ipsum dolor sit amet', 'Lorem ipsum dolor': '2019-01-30 12:21:50  Lorem ipsum Lorem ipsum  Lorem ipsum Lorem ipsum  Lorem ipsum Lorem ipsum Lorem'}

慕的地6264312

您需要将数据(文件流)拆分为\n\n,然后每个项目都需要拆分为\n。根据您的数据结构,项目中的第一行是键,其余行用空格连接 一些指示明确为 设置模式with open,即使默认为r使用dict()instead of{}以避免与 a 混淆set避免在块中编写一堆代码with open。获取数据并关闭文件流[start=0:stop=end:step=1]是获取“列表中的其余项目”的好方法用于json.dumps打印带有数据的漂亮消息 ( indent, sort_keys)import jsond = dict()with open("dummy.txt", "r") as f:    data = f.read()items = data.split("\n\n")for item in items:    item_lines = item.split("\n")    d[item_lines[0]] = " ".join(item_lines[1:])print(json.dumps(d, indent=2, sort_keys=True))输出{  "Lorem ipsum dolor": "2019-01-30 12:21:50  Lorem ipsum Lorem ipsum  Lorem ipsum Lorem ipsum  Lorem ipsum Lorem ipsum Lorem",  "Lorem ipsum dolor sit amet (consectetur adipiscing elit)": "2020-01-05 20:01:02 Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet  Lorem ipsum dolor sit amet"}
随时随地看视频慕课网APP

相关分类

Python
我要回答