尝试使用if语句修改文本文件

时间:2018-01-11 20:33:07

标签: python if-statement

我正在阅读的文本文件,并根据某些条件修改特定行并将文件重写为新文本文件。我现在的代码大部分都有效,但是elif语句之一似乎被Python忽略了,因为没有运行时错误。 MWE如下:

energy = .1
source = str('source  x y z energy=%f' %energy)
c = energy - 0.001
c_string = str("1010 %f %f" %(c, energy))


f = open("file.txt", "r+")
with open ("newfiletxti", 'w') as n:
    d = f.readlines()
    for line in d:
        if not line.startswith("source"):
            if not line.startswith("xyz"):
                n.write(line)
        elif line.startswith("source"):
            n.write(source + "\n")
        elif line.startswith("xyz"):
            n.write(c_string + "\n")
    n.truncate()
    n.close()

代码:

elif line.startswith("source"):
    n.write(source + "\n")

按预期工作,文本文件中的行替换为标题为" source"的字符串。然而下一个块:

elif line.startswith("xyz"):
    n.write(c_string + "\n")

无效。新的文本文件只是缺少以xyz开头的行。我的猜测是我的多个elif语句的语法不正确,但我不确定为什么。

3 个答案:

答案 0 :(得分:2)

像这样试试你的if块:

    if line.startswith("source"):
        n.write(source + "\n")
    elif line.startswith("xyz"):
        n.write(c_string + "\n")
    else:
        n.write(line)

答案 1 :(得分:0)

永远不会到达第三个elif。为清晰起见,下面是代码:

if not line.startswith("source"):
# suff
elif line.startswith("xyz"):
# stuff

以“xyz”开头的东西不以“source”开头。

答案 2 :(得分:0)

第一个ifelif处理所有情况 - 该行以source开头,或者不是。我认为您需要将第一个if及其嵌套if合并为一个条件:

if not line.startswith("source") and not line.startswith("xyz"):
    n.write(line)

或等价的(de Morgan's Laws):

if not(line.startswith("source") or line.startswith("xyz")):
    n.write(line)

或者您可以通过重新排序条件来更清楚地说明:

if line.startswith("source"):
    n.write(source + "\n")
elif line.startswith("xyz"):
    n.write(c_string + "\n")
else:
    n.write(line)