使用这个python脚本时,我遇到了使用不同数字长度的布尔运算符的问题。
with open ('data/idata.csv') as pdata: #Import Status CSV
readstatus = csv.reader(pdata, delimiter=',')
for row in readstatus:
PN = row[0]
Desc = row[1]
Min = row[2]
Stock = row[3]
Assem = row[4]
if (Assem == 'No'):
print(PN+Min+Stock)
if (Stock<Min):
p.insert("",0,text=PN,values=(Desc, Stock))
else:
print('')
else:
print('')
pdata.close()
问题是:50&gt; 25正确; 25> 50 FALSE; 150&gt; 110 True;
但是... 100&gt; 25 FALSE ...和12&gt; 2 FALSE
注意:print语句仅用于调试
提前致谢
答案 0 :(得分:1)
>>> '100'>'25'
False
>>> int('100')>int('25')
True
答案 1 :(得分:0)
csv
模块将字符串作为单元格值返回。字符串在lexicographical order中相互比较,即1
,11
,12
和21 are sorted exactly like
a ,
aa {{1} } ab ,
ba`将按字母顺序排序。
在您的情况下,如果值始终为整数,则您希望将值转换为and
;如果值为int
或float
,则需要将值转换为Decimal
。重新分数。
因此你的固定代码
with open ('data/idata.csv') as pdata:
readstatus = csv.reader(pdata, delimiter=',')
for row in readstatus:
PN = row[0]
Desc = row[1]
Min = int(row[2])
Stock = int(row[3])
Assem = row[4]
if Assem == 'No':
print(PN, Min, Stock)
if Stock < Min:
p.insert("", 0, text=PN, values=(Desc, Stock))
else:
print('')
else:
print('')
(另请注意,您无需关闭pdata
,因为这是with
语句的用途!)