Python搜索一个文本文件中的值,将它们与另一个文本文件中的值进行比较,如果存在匹配项,则替换这些值

Python搜索一个文本文件中的值,将它们与另一个文本文件中的值进行比较,如果存在匹配项,则替换这些值,python,Python,我有两个文件 第一个文件(约400万个条目)有两列:[标签][能量] 第二个文件(~200000个条目)有两列:[上标签][下标签] 例如: 文件1: 375677 4444.5 375678 6890.4 375679 786.0 375677 375679 4444.5 786.0 375678 375679 6890.4 786.0 文件2: 375677 375679 375678 375679 我想用文件1中的“能量”

我有两个文件

第一个文件(约400万个条目)有两列:[标签][能量]
第二个文件(~200000个条目)有两列:[上标签][下标签]

例如:

文件1:

375677 4444.5              
375678 6890.4        
375679  786.0
375677 375679 4444.5 786.0  
375678 375679 6890.4 786.0
文件2:

375677 375679      
375678 375679
我想用文件1中的“能量”值替换文件2中的“标签”值,以便文件2变成:

文件2(新):

4444.5 786.0   
6890.4 786.0
或将“能量”值添加到文件2中,使文件2成为:

文件2(可选):

375677 4444.5              
375678 6890.4        
375679  786.0
375677 375679 4444.5 786.0  
375678 375679 6890.4 786.0
在python中一定有办法做到这一点,但我的大脑不工作

到目前为止我已经写过了

from sys import argv   
from scanfile import scanner   
class UnknownCommand(Exception): pass   

def processLine(line):       
  if line.startswith('23'):   
    print line[0:-1]

filename = 'test1.txt'   
if len(argv) == 2: filename = argv[1]   
scanner (filename, processLine)   

where scanfile is:

def scanner(name, function):   
  file = open(name, 'r')   
  while True:   
    line = file.readline()   
    if not line: break   
    function(line)   
  file.close()   
这允许我通过手动插入文件2中的标签(例如23),搜索并打印文件1中的标签+值。毫无意义且耗时

我需要写一个部分,从文件2中读取标签,并将它们连续放入'line.startswith('lable'),直到文件2的末尾

有什么建议吗


谢谢您的帮助。

假设
file1
中的标签是唯一的,我会首先将该文件读入字典:

with open('file1') as fd:
    data1 = dict(line.strip().split()
                 for line in fd if line.strip())
这提供了一个字典
data1
,其内容如下:

{
  '375677': '4444.5',
  '375678': '6890.4',
  '375679': '786.0',
}
现在,通读
文件2
,根据需要执行适当的修改 您可以遍历该文件:

with open('file2') as fd:
    for line in fd:
        data = line.strip().split()
        print data1[data[0]], data1[data[1]]
或者,您可以选择:

with open('file2') as fd:
    for line in fd:
        data = line.strip().split()
        print ' '.join(data), data1[data[0]], data1[data[1]]

只有当4M条目对您的内存来说太多时,这种方法才值得采用

  • 从所有File2 ID(上限和下限)创建一个集合
  • 在大文件(File1)上循环并创建一个dict仅包含映射中的条目
  • 再次循环文件2并生成输出文件
  • 一些代码可以演示它:

    s = set()
    with open('File2') as file2:
        for line in file2:
            for i in line.split():
                s.add(i)
    d = {}
    with open('File1') as file1:
        for line in file1:
            k,v = line.split()
            if k in s:
                d[k] = v
    with open('NewFile2', 'w') as out_file:
        with open('File2') as file2:
            for line in file2:
                k1,k2 = line.split()
                out_file.write(' '.join([k1,k2,d[k1],d[k2]]))
    

    如果你先自己尝试一些东西,然后告诉我们哪里有问题,你会得到更好的答案。我已经写了几个章节来扫描文件1并打印结果(手动放入标签)。不知道如何从文件2中读取标签,并将它们依次插入到我所写的内容中。这可能是完全错误的方式。