为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2023-05-09 16:14:07
您好我正在尝试将文本文件转换为字典,但我的分隔符是一个空行。因此,我的部分数据的示例dummy.txt如下所示:Lorem ipsum dolor sit amet (consectetur adipiscing elit)2020-01-05 20:01:02Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet Lorem ipsum dolor sit ametLorem ipsum dolor2019-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] = valprint (d)任何帮助将不胜感激!先感谢您
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

你快到了,你需要用双换行符拆分整个文件,然后键是该组中的第一行,而 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'}



查看完整回答
反对 回复 2023-05-09
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您需要将数据(文件流)拆分为\n\n,然后每个项目都需要拆分为\n。根据您的数据结构,项目中的第一行是键,其余行用空格连接

一些指示

  • 明确

    1. 为 设置模式with open,即使默认为r

    2. 使用dict()instead of{}以避免与 a 混淆set

  • 避免在块中编写一堆代码with open。获取数据并关闭文件流

  • [start=0:stop=end:step=1]是获取“列表中的其余项目”的好方法

  • 用于json.dumps打印带有数据的漂亮消息 ( indentsort_keys)

import json


d = 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"

}


查看完整回答
反对 回复 2023-05-09
  • 2 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信