检查文本文件中的子字符串时出现什么错误?

What is the error I'm making when checking for substrings from a text file?

提问人:Priyansh Mehta 提问时间:10/28/2023 更新时间:10/28/2023 访问量:29

问:

我正在编写一个 python 代码来检查文本文件中的一行是否包含特定的子字符串,如果包含,我将打印它的行号。到目前为止,它一直在匹配正确的行号和错误的行号,我不知道我哪里出了问题。我知道有一些用户函数可以做到这一点,这要容易得多,但我想知道我编写的代码出了什么问题

这里,str1 是给定的子字符串,myfile 是文本文件。

for myline in myfile:           
        line_num = line_num + 1
        count1=0
        i=0
        for i in range (0,len(myline)-len(str1)+1):
            match1 = True
            if str1[0]==myline[i]:
                j=1
                for j in range(1,len(str1),1):
                    if str(str1[j])!=str(myline[i+j]):
                        match1 = False
                        break
                    else:
                        count1=count1+1
                        if count1 == len(str1):
                            print(line_num)
Python 字符串 文件处理

评论

0赞 Matthias 10/28/2023
该算法太复杂了。如果你想找到,那么一个简单的就足够了。如果您还需要行号,则无需自己计算。将循环更改为“.str1mylineif str1 in myline:for line_num, myline in enumerate(myfile):
0赞 Priyansh Mehta 11/3/2023
是的,谢谢@Matthias,我也知道这些替代方案。我只想检查一下这段代码哪里出了问题。这段代码确实需要很多时间,因为它有很多循环。

答:

0赞 Priyansh Mehta 10/28/2023 #1

我弄清楚了原因 如果存在不匹配,则 count1 变量不会重置为 0。 取而代之的是,

        for j in range(1,len(str1),1):
            if str(str1[j])!=str(myline[i+j]):
                match1 = False
                break

我应该写这个,

        for j in range(1,len(str1),1):
            if str(str1[j])!=str(myline[i+j]):
                match1 = False
                count1=0
                break