【问题标题】:Python cannot find string in file when the string is just there当字符串就在那里时,Python 无法在文件中找到字符串
【发布时间】:2019-01-23 05:10:17
【问题描述】:

我有一个数据库文件“db.txt”,格式如下:

"sg_number":1,"blablabala"....
"sg_number":2,"blablabala"....
"sg_number":10,"blablabala"....
"sg_number":9,"blablabala"....

等等。

我想删除所有包含 '"sg_number": i' 的行,因为 i 在 (1, 8) 范围内,并将剩余的行输出到另一个文件 "db_filtered.txt"

于是我写了如下代码:

infile = open("db.txt", "r")

newopen = open('db_filtered.txt', 'w')

for i in range(1,8):
    a='"sg_number":'+ str(i) + ','
    for line in infile :
        if a in line:
            line = line.replace('.' , '')
        else:
            newopen.write(line)

newopen.close()

但是,生成的 db_filtered.txt 仍然包含 db.txt 中的所有内容。我期望删除“sg_number”小于 9 的行。

我注意到的是,删除第 6 行中的 "+ ','" 会导致删除任何包含 "sg_number":1 的行,即第 1 行和第 3 行。但是第 2 行满足条件 "i in range(1, 8)" 不会被删除。

我可以知道这里有什么问题以及我应该对代码进行哪些更正以完成它应该做的事情吗?

非常感谢!

【问题讨论】:

  • 尝试了解代码执行路径,您的代码会检查每个i的整个文件,但如果没有匹配,它仍然写入到文件。

标签: python string search


【解决方案1】:
new = infile.readlines() 
for line in new:
    for i in range(1,9):
        a='"sg_number":'+ str(i) + ','
        if a in line:
            new.remove(line)

这将创建一个新列表,其中删除“sg_number”1-8 行。现在将列表写入文件。 我不太确定,但这会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多