不同数字长度的CSV数据的Python布尔错误

时间:2016-02-12 22:58:36

标签: python python-3.x

使用这个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语句仅用于调试

提前致谢

2 个答案:

答案 0 :(得分:1)

>>> '100'>'25'
False
>>> int('100')>int('25')
True

答案 1 :(得分:0)

csv模块将字符串作为单元格值返回。字符串在lexicographical order中相互比较,即11112和21 are sorted exactly like a , aa {{1} } ab , ba`将按字母顺序排序。

在您的情况下,如果值始终为整数,则您希望将值转换为and;如果值为intfloat,则需要将值转换为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语句的用途!)