如何搜索文件中的值并替换

时间:2015-06-12 04:44:18

标签: python

我有一个列表,其中包含要在文件和字典中搜索的值以及应该替换的值,我给出了文件的示例内容和相同的输出,我不确定如何搜索和替换?任何人都可以提供指导吗?

   list_to_search =['TRC_BTM', 'TRC_HCI', 'TRC_L2CAP']
    dict = {'TRC_BTM': '6', 'TRC_HCI': '6', 'TRC_L2CAP': '6'}

    filename ='file.conf'
f = open(filename, 'r')
for value in list_to_search :
    print "dummy"
    #1.search value in file 
    #2.replace with dict[value]
f.close()

INPUT:-
    #comment1  
    TRC_BTAPP only.
    TRC_BTM=2
    TRC_HCI=2
    TRC_L2CAP=2
    #comment2

OUTPUT:-
    #comment1  
    TRC_BTAPP only.
    TRC_BTM=6
    TRC_HCI=6
    TRC_L2CAP=6
    #comment2
    ...

2 个答案:

答案 0 :(得分:1)

当且仅当file contains the strings as your sample input以下方法有效:

如果您愿意,可以将输出写入文件,而不是打印:

我的代码:

list_to_search =['TRC_BTM', 'TRC_HCI', 'TRC_L2CAP']
dict = {'TRC_BTM': '6', 'TRC_HCI': '6', 'TRC_L2CAP': '6'}

filename ='test.txt'    

for a in open(filename):
    if any(ext in a for ext in list_to_search):
        for value in list_to_search:
            if value in a and "=" in a:
                print value+"="+dict[value]
    else:
        print a

修改后的代码:

list_to_search =['TRC_BTM', 'TRC_HCI', 'TRC_L2CAP']
dict = {'TRC_BTM': '6', 'TRC_HCI': '6', 'TRC_L2CAP': '6'}

filename ='test.txt'

output_writer=[]
with open(filename, "r") as f:
    for a in f:
        print a
        if any(ext in a for ext in list_to_search):
            for value in list_to_search:
                if value in a and "=" in a:
                    output_writer.append(value+"="+dict[value])
                    #print value+"="+dict[value]
        else:
            # print a
            output_writer.append(a.strip())

output="\n".join(output_writer)
with open(filename, "w") as f:
    f.write(output)

答案 1 :(得分:1)

我已经找到了另一种解决方案,基本上是它的功能,而不是将整个文件内容读入内存,你逐行读取并检查你读过的每一行,如果它有一个{{1} },然后修改它,如果是这样:

elements of list_to_search

编辑:回复您的评论如下:

list_to_search =['TRC_BTM', 'TRC_HCI', 'TRC_L2CAP']
myDict = {'TRC_BTM': '6', 'TRC_HCI': '6', 'TRC_L2CAP': '6'}

filename ='file.conf'

with open(filename, 'rb+') as f:

    while True:         
        line = f.readline()
        if not line: break          
        for key in list_to_search:
            if key in line:
                f.seek(-len(line),1)
                f.write(key + '=' + myDict[key] + '\n')
                f.flush()