这是我的代码:
last_state={}
last_device={}
last_substate={}
with open("TESTFILE.csv") as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
device = row[0]
state = row[1]
model = row[2]
substate=row[3]
#time = row[4]
if device in row:
if substate == 'Not joined' and model !='electric_meter':
if state == "Offline":
N_off = [device]
# print N_off, reader.line_num
if state == 'Online':
N_on = [device]
if N_off == N_on:
print device, reader.line_num
我正在尝试比较这两个循环的设备ID,以便我只使用符合所有条件的那些。我不知道为什么但是我收到了这个错误:
`if N_off == N_on:
NameError: name 'N_off' is not defined`
我不熟悉Python以及声明变量如何工作,但我试图在全局声明它们,这给了我同样的错误。我理解这是因为我在其范围之外使用N_off
,但我不确定如何纠正它。
答案 0 :(得分:0)
假设您希望N_off
是全局的,则需要import
包含N_off
全局声明的文件,并在此文件中将其用作filename.N_off
。在包含声明的文件中,您不需要在文件名前加上前缀。请注意,您(通常)不需要在python中声明变量。全局变量是一个例外。
示例:强>
<强> OtherFile 强>
global N_off
N_off = value
<强> CurrentFile 强>
import OtherFile
if OtherFile.N_off == N_on:
答案 1 :(得分:0)
看一下代码的这一部分:
if state == "Offline":
N_off = [device]
if state == 'Online':
N_on = [device]
if N_off == N_on:
print device, reader.line_num
如您所见,N_off
仅定义为if state == "Offline"
,而N_on
仅定义为if state == 'Online'
。
因此,当您在上一个if
语句中对它们进行比较时,Python只定义了其中一个,因此只知道其中一个。
您只需在程序中的某个位置初始化,以确保它们都已定义。
答案 2 :(得分:0)
您已在N_off
语句中定义N_on
和if
,只有一个或另一个可以为真并执行,请尝试以下方法:
last_state={}
last_device={}
last_substate={}
with open("TESTFILE.csv") as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
device = row[0]
state = row[1]
model = row[2]
substate=row[3]
#time = row[4]
if device in row:
if substate == 'Not joined' and model !='electric_meter':
N_off = None
N_on = None
if state == "Offline":
N_off = [device]
# print N_off, reader.line_num
if state == 'Online':
N_on = [device]
if N_off == N_on:
print device, reader.line_num
但是我没有看到这里的逻辑:
if state == "Offline":
N_off = [device]
# print N_off, reader.line_num
if state == 'Online':
N_on = [device]
if N_off == N_on:
print device, reader.line_num
因为这个:
if N_off == N_on:
print device, reader.line_num
永远不会执行,因为状态不能同时打开和关闭。
答案 3 :(得分:0)
假设您要遍历所有设备,并想要检查连续行是否具有与“离线”和“在线”相同设备的值。
你可以使用下面的代码,基本上在检查变量是否相等时,我添加了额外的条件来检查变量是否被初始化。如果他们没有初始化,我认为你的情况不会得到满足。
last_state={}
last_device={}
last_substate={}
#reader = [('device','Offline','model','Not joined')]
# Instead of file reading from list
reader = [('device','Offline','model','Not joined'),('device','Online','model','Not joined')]
for row in reader:
device = row[0]
state = row[1]
model = row[2]
substate=row[3]
#time = row[4]
if device in row:
if substate == 'Not joined' and model !='electric_meter':
print(state)
if state == "Offline":
N_off = [device]
if state == 'Online':
N_on = [device]
# added condition to check if this variables are initialized or not.
if 'N_on' in locals() and 'N_off' in locals() and N_off == N_on:
print "Check passed"