我创建了这段代码,它完全符合我的要求:
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语句,这样如果fn
和ln
不在文件中,它将写入文件而不是执行所有其他操作。我添加了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)
如何阻止此事?
答案 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
中并没有什么特点。