我的print语句的输出输出正确的数据行,但输出文件只包含3 if语句的最后一行。我试过改变标识,但这似乎只会对代码产生负面影响。
import sys
import tokenize
file = []
f = open('Database.txt') # Opening File
for line in f:
file.append(line) # Reading in File
f.close() # Closing File
f = open('output.txt', 'w')
for line in file: # Printing out File
#print line
tokens = line.split() # splits lines along white-space (tokenise)
#print tokens
desired = '{0:<5}'.format(tokens[0])
#print desired
lined = line.split('|') # lhs is original line
if 'Not present in Line' in line:
line1 = desired + ':' + lined[1]
#print line1
if 'Not present in TV' in line:
#print line
line2 = desired + ' : ' + ' sticking ' + ' Returning ' + '\n'
#print line2
if 'Not present in Line' not in line and 'Not present in TV' not in line:
#print line
line3 = desired + ':' + lined[1]
#print line3
f.write(line1 + line2 + line3)
f.close()
答案 0 :(得分:3)
你需要缩进
行f.write(line1 + line2 + line3)
与之前if
语句的级别相同。目前,它位于for
循环之外,因此仅在该循环结束后才执行。
此外,您可能希望在每行后添加换行符:
f.write(line1 + line2 + line3 + "\n")
正如Jon Clements正确指出的那样,如果不满足所有三个if
条件,您需要考虑应该发生什么 - 在这种情况下,lineN
变量可能未定义或仍可能定义为上一次迭代的值。实际上,同时满足所有三个条件的不可能,因此您在第一次迭代期间总会遇到NameError
。
只有您可以决定是否有必要在for
循环开始时将它们设置为默认值或执行其他操作。