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

2024-06-23 19:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两份文件。在

第一个文件(约400万个条目)有2列:[Label][Energy]
第二个文件(约200000个条目)有2列:[上标签][下标签]

例如:

文件1:

375677 4444.5              
375678 6890.4        
375679  786.0

文件2:

^{pr2}$

我想将文件2中的“label”值替换为文件1中的“energy”值,使文件2变成:

文件2(新):

4444.5 786.0   
6890.4 786.0

或将“能量”值添加到文件2中,使文件2变为:

文件2(可选):

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中的lable+值。毫无意义又费时。在

我需要写一个从文件2中读取标签并将它们放入'线路启动('lable')连续,直到文件2的结尾。在

有什么建议吗?在

谢谢你的帮助。在


Tags: 文件namefromimportifdefline条目
2条回答

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

with open('file1') as fd:
    data1 = dict(line.strip().split()
                 for line in fd if line.strip())

这将提供一个包含如下内容的词典data1

^{pr2}$

现在,通读file2,执行适当的修改如下 迭代该文件:

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]]

只有当4百万个条目对你的记忆来说太多时,这种方法才值得采用

  1. 从所有File2 id(上部和下部)创建一个集合
  2. 在大文件(File1)上循环并创建一个dict,其中包含映射中的条目
  3. 再次在File2上循环并生成输出文件

一些代码可以演示:

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]]))

相关问题 更多 >

    热门问题