我有一个文件xyz.txt,其中有一些分配给不同变量的值,如下所示。
abc.def = "Hi how are you"
abc.def.ghi = "Hi I am fine"
abc.def.ghi.jkl = "What are you doing"
abc.def.ghi.Mno = "I am working"
我想编写一个python泛型函数,该函数读取abc.def.ghi.Mno行并将字符串从“我在工作”更改为“我在玩” 此功能也应用于其他文件。 我尝试使用line.startswith(abc.def.ghi.Mno),但无法正常工作。
下面是我尝试过的。
先谢谢了。
def find_replace(new_value, start_str, filename):
result = ""
with open(filename) as f:
for line in f:
if line.lower().startswith( start_str ):
list = line.split('=')
list[1] = new_value + '\n'
line = "=".join( list )
result += line
f = open(filename, 'wt')
f.write(result)
f.close()
find_replace(new_value = "I am playing", start_str = "abc.def.ghi.Mno", filename=xyz.txt)
答案 0 :(得分:1)
您几乎明白了。您只需在测试line
是否以"abc.def.ghi.Mno"
(混合大小写的字符串)开头之前将其小写,就可以了,所以自然不是这样。删除.lower()
,它应该可以工作。
答案 1 :(得分:0)
您的代码存在许多问题。正如blhsing所述,其中之一是line.startswith()区分大小写,因此调用.lower()将与您的start_str不匹配。您还需要确保文件名是字符串(加引号)。如果要像原始xyz.txt中一样添加引号,则在添加字符串时将其转义即可将其添加到列表中:
def find_replace(new_value, start_str, filename):
result = ""
with open(filename) as f:
for line in f:
if line.lower().startswith( start_str ):
list = line.split('=')
list[1] = "\"" + new_value + "\"\n"
line = "=".join( list )
result += line
f = open(filename, 'wt')
f.write(result)
f.close()
find_replace(new_value = "I am playing", start_str = "abc.def.ghi.Mno", filename="xyz.txt")