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

Converting text file to dictionary with empty line as the only separator

您好,我正在尝试将文本文件转换为字典,但我的分隔符是一个空行。所以我的 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)

如有任何帮助,我们将不胜感激!提前谢谢你

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

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

一些指示
  • 明确
    1. with open 设置模式,即使默认为 r
    2. 使用 dict() 而不是 {} 以避免与 set
    3. 混淆
  • 避免在with open 块中编写一堆代码。获取数据并关闭文件流
  • [start=0:stop=end:step=1] 是获取“列表中的其余项目”的好方法
  • 使用 json.dumps 用您的数据打印漂亮的消息 (indent, sort_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"
}