我正在扫描特定行的日志文件(在目录中),需要在文本文件中输出所有内容
出于某种原因,我不明白,我有一个错误:
NameError: name 's' is not defined
我试图将Vars
分配给另一个Var,但仍然无法解决这个问题
在我的代码中,我将有一个“if”和5个“elif”,如下所示:
If
var1
elif
var2
elif
var3
elif
var4
elif
var5
elif
var6
write.output_file(var1+var2+var3+var4+var5+var6+'\n')
代码如下:
import os
import re
start_tm = '," Start Time'
test_ID = ' Host Name: '
cell_f = open('C:\\03\\OUTCOME.txt','w')
given_path = 'C:\\02\\en15\\TST2'
for filename in os.listdir(given_path):
filepath = os.path.join(given_path, filename)
if os.path.isfile(filepath):
#print("File Name: ", filename)
print("File Name\\Path:", filepath+'\n')
with open(filepath) as mfile:
for rn_l in mfile:
rn_l= rn_l.rstrip()
if start_tm in rn_l:
*extraWords,st_t1 = rn_l.split('Time') # Grtting Start Time #
s=str(st_t1)
s=s.replace('"','')
print ("Start String \"s\"is a TYPE ", type(s))
print ("START TIME STRING "+s)
elif test_ID in rn_l:
*extraWords,t_id1,t_id2, = rn_l.split( )
print ("TESTER ID --->>> "+t_id1)
t_id11,t_id12, = rn_l.split('Host')
*w,e,c,d = re.split(" +", t_id11)
cell = str(e+'_'+c)
cell = cell.replace('[','').replace(']','')
print ("Cell Line " + cell+'\n')
发生这种情况的原因是因为
python将输入if语句,该语句将为s赋值。在此之后,python忽略elif语句并退出if块并继续执行if后面的任何语句
什么时候
python检查elif中的条件,如果该语句为真
python不会输入if块,而是输入elif块,它不会给s赋值。这就是为什么你会犯名字错误
更正:
尽管上面的解释是正确的,但它并没有解决for循环问题。只有在if之前输入elif时,才会发生此错误。因为,如果python首先输入if,那么应该有一个
s
变量,但是如果python输入elif,它将抛出该错误,因为if之前没有输入本质上,这是因为文件的第一行不能满足if语句。有几种方法可以解决这个问题。如果不能保证文件的第一行
start_tm in rn_l
为True,并且仍然需要那些不满足start_tm in rn_l
的行,请在输入for循环之前将s
定义为空字符串或其他内容如果您可以舍弃这些行,那么将
s
定义为None
,并签入elif,以便如果s是None
(这意味着尚未输入If),则不执行elif看
相关问题 更多 >
编程相关推荐