Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在字典的空行之前在打开的文件中追加行,然后继续追加以下行直到下一个空行?_Python_Loops_Dictionary_Readline - Fatal编程技术网

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]]用于值中值的键}

很抱歉,我不知道我应该输入确切的文件结构(第一次在这个网站上),所以文件结构没有这么简单。我用文件结构更新了我的主要问题!谢谢你这么快回答!我等了很久,因为我意识到我又犯了一个错误,但我设法使你的解决方案适合我的!非常有帮助,我很感激你使用了如此清晰的语言,因为我理解正在发生的一切。再次非常感谢你!!这个方法是干净的!但是会消耗更多的时间!非常感谢。我选择了另一种方法,因为当我看到这一点时,我已经完成了一半,但是看到一种更短的方法非常好。我尝试过投票,但不能,因为我没有足够的声誉,我会回来再试一次,当我这样做!没关系!!你不必:)