0

私はこれを機能させています:

address = []

for row in ws.iter_rows(row_offset=4,column_offset=3):
    if len(row) > 0:
        cell = row[2]
        if cell.internal_value is not None: 
           *something here, append appropriate cell values to address*

print address
return address

これは、Excel スプレッドシートの列を正常に通過し、空でないすべてのセルを取得します。ただし、アスタリスクでは、出力を調べて数字だけを引き出す方法がわかりません。読み進めるのがおかしいかもしれませんが、必要な数字は「1.0、2.0、3.0、4.0 など」です。他のすべての部分と実際の数値自体は、別のスプレッドシートで読むと変更される可能性がありますが、同じ形式になります。

したがって、私が知る必要があるのは、このリストを調べて、10 進数ではないものをすべて取り除き、理想的にはそれらの 10 進数を整数に変換する方法です。

また、リスト内包表記でこれを行う良い方法があると確信していますが、Pythonで1週間プログラミングしただけなので、実際にそれを行う方法がわかりません。

これが紛らわしい場合は申し訳ありませんが、事前に助けてくれてありがとう.

4

4 に答える 4

1

あなたはこれを行うことができます:

int_values = [int(v) for v in cell.internal_values if type(v) == float]

または、これらの値が 1 つの項目で区切られていることに気付いたので、これも必要になるかもしれません。

int_values = [int(cell.internal_values[i]) for i in xrange(1, len(cell.internal_values), 2)]

(最初のものを破棄する必要があるため、 range( 1 , ...) を使用する必要がある場合があります。パターンはインデックス 1 から始まります)。

于 2012-06-22T15:37:41.417 に答える
1

Pythonで文字列が float かどうかを確認する優れた方法はありませんが、これで十分です。

>>> def is_float(n):
...     try:
...         float(n)
...         return True
...     except ValueError:
...         return False
>>> x = ["garbage", "1.0", "trash", "2.0"]
>>> [i for i in x if is_float(i)]
['1.0', '2.0']
于 2012-06-22T15:35:37.113 に答える
0

将来誰かが最初の部分の解決策を必要とする場合に備えて、この回答を「パート1」として追加します。質問の2番目の部分(floatのリストをintに変換する)は、受け入れられた回答にあります。

すべてのフロートを取り除くために、元のアルゴリズムは次のように修正されました。

addr = []

for row in ws.iter_rows(row_offset=4,column_offset=3):
    if row:
        cell = row[2]
        try:
            addr.append(float(cell.internal_value))
        except ValueError:
            pass
        except TypeError:
            pass

address = [int(v) for v in addr if type(v) == float]

最後の行は、受け入れられた回答のコードです。アルゴリズムの改訂は、実際にはここで他の誰かの作業でしたが、投稿は削除されました!ミステリーユーザーに感謝します。ここでクレジットをいただければ幸いです。

于 2012-06-22T15:49:46.063 に答える
0

したがって、私が知る必要があるのは、このリストを調べて、10 進数でないものをすべて取り除き、理想的にはそれらの 10 進数を整数に変換する方法です。

リストには浮動小数点数が含まれており、浮動小数点数である文字列は含まれていないため:

only_floats = [i for i in big_list if isinstance(float,i)]
于 2012-06-22T15:42:31.360 に答える