使用open的IF语句

时间:2015-05-13 12:38:52

标签: python python-2.7

我创建了这段代码,它完全符合我的要求:

name = list()

with open("Classes\Class " + cl + ".txt", "r+") as f:
    for line in f:
        if ("%s %s" %(fn, ln)) in line:
            name.append(line.strip() + " %s" %(s))
            with open("Classes\NewFile.txt", "a") as g:
                for line in f:
                    if line != name:
                        g.write("\n" + line.strip())

现在我想添加一个else语句,这样如果fnln不在文件中,它将写入文件而不是执行所有其他操作。我添加了else语句,但现在if语句只检查文件中的第一行,然后转到else语句。

with open("Classes\Class " + cl + ".txt", "r+") as f:
for line in f:
    if ("%s %s" %(fn, ln)) in line:
        name.append(line.strip() + " %s" %(s))
        with open("Classes\NewFile.txt", "a") as g:
            for line in f:
                if line != name:
                    g.write("\n" + line.strip())
    else:
        f.write("\n" + da)

如何阻止此事?

2 个答案:

答案 0 :(得分:0)

所以我尝试用你的代码做一个简单的例子:

fn = 'Harr'
ln = 'Rive'

# fn = 'Bob'
# ln = 'Bobbington'

with open('1.txt', 'r+') as f:
    for line in f:
        if ("%s %s" %(fn, ln)) in line:
            print('Wow')

        else:
            print('Nah')

我的档案就是这样:

Harr Rive 10
Bob Bobbington 10

输出结果为:

Wow
Nah
Nah

最后一个是因为文件末尾的换行符

如果取消注释,则输出为:

Wow
Nah
Nah

所以我猜你错过了那里的东西。或者它实际上没有"跳过"像你说的那样。

答案 1 :(得分:0)

if内处理with语句没有什么不寻常之处。

您的输入文件是:

Harr Rive 10
Bob Bobbington 10

您的代码(带有更正的缩进)是:

name = list()

with open("Classes\Class " + cl + ".txt", "r+") as f:
    for line in f:
        if ("%s %s" %(fn, ln)) in line:
            name.append(line.strip() + " %s" %(s))
            with open("Classes\NewFile.txt", "a") as g:
                for line in f:
                    if line !=name:
                        g.write("\n" + line.strip())
        else:
            f.write("\n" + da)

fn = 'Harr'ln = 'Rive'的第一种情况下,第一个if语句将为true。然后将该行的修饰版本附加到 list name的末尾,然后代码将打开文件Classes\NewFile.txt并在其中附加输入中的其余行文件。请注意,输入文件中所有剩余行将附加到输出文件,因为条件line != name将始终为真 - 字符串永远不会等于列表else永远不会执行。

在使用fn = 'Bob'ln = 'Bobbington'的第二种情况下,第一个if将失败,因为第一行输入为Harr Rive 10,但不包含Bob Bobbington 。因此执行else块。然后读取第二个输入行(Bob Bobbington 10),这与外部if条件匹配,并输入内部循环。但是文件的最后一行已被使用,因此未输入内部for循环并且代码终止。

所以一切都按照你的代码运作,正如你所看到的,你所设想的if嵌套在with中并没有什么特点。