1

これは私の心を吹き飛ばします。私は何が欠けていますか?

Excelシートのセルが空かどうかを検出しようとしています。しかし、どのテストも私が期待するように機能していないようです。単純な「notidkt」テストでは空の文字列とNoneの両方が検出されると思いますが、そうではありません...実際、Noneはどのテストでも検出されないようです。3行目では、印刷されるもの。

コード:

def getFromExcelSheet():
    wb = load_workbook("input.xlsx")
    idkts = [];
    idktRows = get_worksheet_as_list(wb.get_sheet_by_name('Inputs'))
    # print "Got these idkts" 
    for row in idktRows:
        # print row[0]
        idkt = str(row[2]).strip()
        filename = str(row[3]).strip()
        if idkt == None:
            print "Idkt == none"

        if idkt is None:
            print "Idkt is none"

        if idkt == u"":
            print "Idkt is ''"

        if idkt != u"":
            print "Idkt is !=''"

        if not idkt:
            print "not IDKT"

        if idkt:
            print "idkt"

        print idkt

出力

Idkt is !=''
idkt
3398041577

Idkt is !=''
idkt
3498100937

Idkt is !=''
idkt
None
4

2 に答える 2

4

idkt空ではなく、単語を含む文字列'None'です。これがあなたの問題です:

idkt = str(row[2]).strip()

row[2]は、あなたがそれを呼び出すときにNoneなります。これを試して:'None'str

if idkt == 'None': print 'yay!'

文字列を変換する前に、空をテストすることをお勧めします。

idkt = str(row[2]).strip() if row[2] else None
于 2012-11-20T08:44:20.053 に答える
1

None問題は、セルを文字列に変換してから、その結果をPython (文字列ではない)と比較していることです。

openpyxlを使用していると仮定します。その場合.value、たとえば、を介してセルの値にアクセスする必要があります。

idkt = row[2].value

次に、セル内のそのデータを表す標準のPythonオブジェクト(//などstr)が作成されます。空でないチェックにはこの値を使用する必要があります。これにより、当初の期待どおりに動作します。intNone

if idkt not in ('', None):  # remember bool(0) == False
    ...
于 2012-11-20T08:45:29.193 に答える