スプレッドシートから値を読み取るのにopenpyxl
を使用しています。これらの値は浮動小数点数として読み込まれていますが、私はその理由を完全にはわかりません。浮動小数点数を小数点以下の文字列にキャストする方法
import openpyxl as opx
wb = opx.load_workbook(SKU_WORKBOOK_PATH, use_iterators=True, data_only=True)
ws = wb.worksheets[0]
for row in ws.iter_rows():
foo = str(int(row[1].internal_value))
これはエラーを投げている:
ValueError: invalid literal for int() with base 10: '6978279.0'
通常、openpyxlはint
として整数値を読み込み、今回はそれが文字列としてキャストフロートでそれを読んでいます。スプレッドシートでは、このセルの値は6978279
です。
これをfoo = str(int(float(foo)))
としたい文字列に変換しています。その結果、'6978279'
というようになります。私もfoo = foo[:-2]
を実行することができましたが、これはint
または小数点以下の桁で読み取られる可能性のある別のセルが問題になることを心配しています。
これは、自分が持っているものを私が望むものにマッシュする恐ろしい、面倒な方法のように感じます。これを行うもっとpythonicな方法がありますか?力が浮かぶようにxlsx
を読んでいますか?トリプルキャスティングなしでどうすればいいですか?
これはウェブスクレイパーの検索用語に使用されているので、文字列でなければなりません(とにかくスクリプトのその時点で)。しかし '.0'は検索を失敗させます。私はそれを他の検索用語と関連付けるときに 'int'に、次にそれを検索するときに' str'に変換することができます。私はちょうどそれがキャストのこのclunkyコンボなしで一度に3つすべてを行う方法があると思っていた。 – Will
Excelファイルを読むとき、openpyxlはintに変換しようとし、小数点を持つXMLソースの何かについてはfloatに戻ります。 floatからintに簡単に変換できます。また、古いバージョンのAPIを使用していて、 'internal_value'を避けてください。 –