如何将打开文件中的行在字典的空行之前追加,然后继续追加以下行,直到下一个空行



编码初学者,提前感谢!

我有一个文本文件,如:

A
B
1
2
C
D
1
2
3
4
E
F
1
2
3
4
5
6

我想做的是生成一个字典,将空行之前的每个部分都变成一个键值对。例如,我的文本文件字典应该是:

{('A','B'): [[1],[2]], ('C','D'):[[1, 3], [2, 4]], ('E','F'):[[1, 3, 5],[2, 4, 6]]}

现在,我开始我的功能是这样的:

while line != '':
# rest of function to append to dictionary here

但我已经意识到,这只适用于第一行空行。如果我试图继续读取并打印函数后的行,由于while循环的性质,打印的第一行是D而不是C。如何在不导入任何内容的情况下修复此问题?

这里有一种方法可以做到这一点(假设文件结构与您所说的完全一样(:

首先创建一个包含所有行的字符串:

lines = ''.join(list(open("test.txt")))
#'AnBn1n2nnCnDn1n2n3n4nnEnFn1n2n3n4n5n6'

然后分成两对:

pairs = lines.split('nn')
#['AnBn1n2', 'CnDn1n2n3n4', 'EnFn1n2n3n4n5n6']

最后,在每对中拆分密钥和值:

pairs = lines.split('nn')
result = {}
for pair in pairs:
data = pair.split('n')
key = (data[0], data[1])
first_value = data[2::2]
second_value = data[3::2]
result[key] = [first_value, second_value]
result

输出:

{('A', 'B'): [['1'], ['2']],
('C', 'D'): [['1', '3'], ['2', '4']],
('E', 'F'): [['1', '3', '5'], ['2', '4', '6']]}

注:data[2::2]表示数组切片从2位置开始,每2个元素迭代一次

执行以下操作:

txt = x.read_text() # read file as string here
txt = txt.split('nn')
txt = list(map(lambda y: y.split('n'), txt))
keys = list(map(lambda y: y[:2], txt))
values = list(map(lambda y: y[2:], txt))
d = {tuple(key): [[value[0::2]], [value[1::2]]] for key in keys for value in values}

最新更新