将文本文件转换为以空行作为唯一分隔符的字典
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
。根据您的数据结构,项目中的第一行是键,其余行用空格连接
一些指示
- 明确
- 为
with open
设置模式,即使默认为 r
- 使用
dict()
而不是 {}
以避免与 set
混淆
- 避免在
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"
}
您好,我正在尝试将文本文件转换为字典,但我的分隔符是一个空行。所以我的 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
。根据您的数据结构,项目中的第一行是键,其余行用空格连接
- 明确
- 为
with open
设置模式,即使默认为r
- 使用
dict()
而不是{}
以避免与set
混淆
- 为
- 避免在
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"
}