python:如果文件每一行都包含相同的字符串,line.startswith(str)将不起作用

时间:2018-07-06 04:47:36

标签: python

我有一个文件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)

2 个答案:

答案 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")