Python 如何在字典的空行之前在打开的文件中追加行,然后继续追加以下行直到下一个空行?
编码初学者,提前感谢 我有一个文本文件,如:Python 如何在字典的空行之前在打开的文件中追加行,然后继续追加以下行直到下一个空行?,python,loops,dictionary,readline,Python,Loops,Dictionary,Readline,编码初学者,提前感谢 我有一个文本文件,如: 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
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")))
#'A\nB\n1\n2\n\nC\nD\n1\n2\n3\n4\n\nE\nF\n1\n2\n3\n4\n5\n6'
然后分成两组:
pairs = lines.split('\n\n')
#['A\nB\n1\n2', 'C\nD\n1\n2\n3\n4', 'E\nF\n1\n2\n3\n4\n5\n6']
最后,在每对中拆分键和值:
pairs = lines.split('\n\n')
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()#在此处以字符串形式读取文件
txt=txt.split('\n\n')
txt=列表(映射(lambda y:y.split('\n'),txt))
键=列表(映射(lambda y:y[:2],txt))
值=列表(映射(lambda y:y[2:],txt))
d={tuple(key):[[value[0::2]],[value[1::2]]用于值中值的键}
很抱歉,我不知道我应该输入确切的文件结构(第一次在这个网站上),所以文件结构没有这么简单。我用文件结构更新了我的主要问题!谢谢你这么快回答!我等了很久,因为我意识到我又犯了一个错误,但我设法使你的解决方案适合我的!非常有帮助,我很感激你使用了如此清晰的语言,因为我理解正在发生的一切。再次非常感谢你!!这个方法是干净的!但是会消耗更多的时间!非常感谢。我选择了另一种方法,因为当我看到这一点时,我已经完成了一半,但是看到一种更短的方法非常好。我尝试过投票,但不能,因为我没有足够的声誉,我会回来再试一次,当我这样做!没关系!!你不必:)