将3个文件合并为1个大文件,同时在Python中附加到特定行

将3个文件合并为1个大文件,同时在Python中附加到特定行,python,file,merge,Python,File,Merge,我有3个大文件,每个都包含相似的内容,但不同。第一部分是令牌,第二部分是一个字典,其中包含文档ID的整数以及该文档的引用。我的问题是,我不能将所有内容都存储到内存中,而且我需要多次转储到文件中,因为数据非常大。例如: 文件1: token1;{"1": 5, "2": 5, "4": 5} token2;{"2": 3, "3": 4} token3;{"1": 4, &quo

我有3个大文件,每个都包含相似的内容,但不同。第一部分是令牌,第二部分是一个字典,其中包含文档ID的整数以及该文档的引用。我的问题是,我不能将所有内容都存储到内存中,而且我需要多次转储到文件中,因为数据非常大。例如:

文件1:

token1;{"1": 5, "2": 5, "4": 5}
token2;{"2": 3, "3": 4}
token3;{"1": 4, "5": 1, "6": 6}
文件2:

token4;{"7": 2, "9": 1, "12": 2}
token5;{"8": 3, "11": 1, "12": 2}
token2;{"9": 2, "12": 2}
文件3:

token1;{"13": 1, "14": 2}
token6;{"14": 1, "16": 2, "17": 1}
token7;{"14": 1, "17": 2, "18": 1, "19", 3}
我希望最终文件中包含的最终内容:

token1;{"1": 5, "2": 5, "4": 5, "13": 1, "14": 2}
token2;{"2": 3, "3": 4, "9": 2, "12": 2}
token3;{"1": 4, "5": 1, "6": 6}
token4;{"7": 2, "9": 1, "12": 2}
token5;{"8": 3, "11": 1, "12": 2}
token6;{"14": 1, "16": 2, "17": 1}
token7;{"14": 1, "17": 2, "18": 1, "19", 3}
我希望更新的重复令牌,以及将所有新令牌添加到单个文件中。我不能把所有的东西都记在记忆里,但我可以一行一行地看每一行,即使这需要很长时间。(这一时间效率不是最高优先级)。任何方向正确的向导都将不胜感激!谢谢:) 另外,我正在用Python写这篇文章

我需要休息一下,所以

从io导入StringIO
导入json
数据=[
'''\
标记1;{1:5,2:5,4:5}
记号2;{“2:3”,3:4}
记号3;{1:4,5:1,6:6}
''',
'''\
记号4;{“7:2”,9:1,12:2}
记号5;{“8:3”,11:1,12:2}
记号2;{“9:2”,12:2}
''',
'''\
标记1;{“13:1”,14:2}
记号6;{14:1,16:2,17:1}
记号7;{“14:1,17:2,18:1,19:3}
''',
]
out={}
对于数据中的文本:
f=StringIO(文本)
对于f中的行:
键,s=行。拆分(“;”,1)
d=json.loads
setdefault(键,{}).update(d)
对于已排序的输入键(out,key=lambda t:int(t[5:]):
s=json.dumps(out[key])
打印(f“{key};{s}”)

用文件对象替换
data
StringIO()
实例。

您应该使用数据库。@mkrieger1不幸的是,由于这是学校作业的一部分,我们被告知不要使用数据库。为什么?我也不确定,我很想知道,但我不能使用数据库“超大”有多大?请重复,并从。“演示如何解决此编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后就您的算法或技术提出具体问题。堆栈溢出不是为了替换现有的文档和教程。这是一个排序序列的简单合并。好吧,这是一个糟糕的结果。我没有注意到OP关于“无法将所有内容存储到内存”的评论。由于太忙,无法编辑我的上述答案,但也许您可以对令牌上的行进行排序,然后分批处理数据,即,
token1
token100
将是一批,然后是
token101
token200
。这让我找到了我一直在寻找的答案,谢谢!