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