使用python或j使用关键字从一个文件搜索内容并将其替换为另一个文件

2024-04-18 03:40:06 发布

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

我有2个文件,其中包含一些像这样的数据!!你知道吗

文件1包含:

/begin MENT AE0DAQ0O41 ""
  ECU_ADDRESS 0x8111DSCC
  ECU_ADDRESS_EXTENSION 0x0
  /begin IF_DATA CAN_EXT
    120
    LINK_MAP "AE0DAQ0O41" 0x8111DSCC 0x0 0 0x2 1 0x2F 0x1
    DISPLAY 0 0 655
  /end IF_DATA
  SYMBOL_LINK "AE0DAQ0O41" 0
/end MENT

文件2包含:

  name            value    line   keyword   
 .data           80008114+000005 AE0DAQ0O43
 .data           80008116+000005 AE0DAQ0O41
 .data           80008118+000005 EA0DAQ0O45
 .data           8000811a+000005 AE0DAF0O89

现在我们需要做的是获取一个关键字AE0DAQ0O41,然后在下一个文件中进行搜索。你知道吗

它在关键字前面有一些值,所以我们需要取该值80008116,并需要在中替换它 ECU_ADDRESS 0x8111DSCCLINK_MAP AE0DAQ0O410x8111DSCC 0x0 0 0x2 1 0x2F 0x1对于(0x8111DSCC它需要是0x80008116)并将其保存到FILE 1。你知道吗

文件1的保存方式如下:

/begin MENT AE0DAQ0O41 ""
  ECU_ADDRESS 0x80008116
  ECU_ADDRESS_EXTENSION 0x0
  /begin IF_DATA CAN_EXT
    120
    LINK_MAP "AE0DAQ0O41" 0x80008116 0x0 0 0x2 1 0x2F 0x1
    DISPLAY 0 0 655
  /end IF_DATA
  SYMBOL_LINK "AE0DAQ0O41" 0
/end MENT

我们怎么做???因为它有多条像这样的线???? 提前谢谢!!!!!!!你知道吗


Tags: 文件mapdataifaddressextensionlinkcan
2条回答

如果将File 2视为一个制表符分隔的值文件,则可以逐行读取File 1,然后将file1中的关键字与file2中的每一行进行比较。你知道吗

当你得到一个匹配,然后写另一个新的输入文件

快速而肮脏的解决方案: (假设输入都是文本文件…)

代码通过挖掘第二个文件来创建字典。 第一个文件逐行处理,并在所需的修改之后写入输出文件。你知道吗

这当然不是最好的办法。 如果您知道文件的确切格式,您可以优化代码以运行得更快。你知道吗

fout = open('output.txt' , 'w')

beg, ecu, lnk = '/begin','ECU_ADDRESS', 'LINK_MAP'

keyVal = dict()
with open('file2.txt') as f2:
    for line in f2:
        b = line.split(' ')
        newK, newV = b[-1].replace('\n','') , b[-2].split('+')[0]
        keyVal[newK] = newV

with open('file1.txt') as f1:
    value,keyword = '', ''
    for line in f1:
        a = line.split(' ')
        loc = 0

        if beg in a and 'MENT' in a:
            keyword = a[a.index(beg)+2]
            value = '0x'+keyVal.get(keyword,keyword)
        elif ecu in a:
            loc = a.index(ecu) + 1
        elif lnk in a: loc = a.index(lnk) + 2
        else : loc = 0

        if loc != 0:
            a[loc] = value
        a = ' '.join(a)
        fout.writelines(a)

fout.close()

相关问题 更多 >