web-dev-qa-db-ja.com

フロートは文字列または数値でなければなりませんか?

私は非常にシンプルなプログラムを持っています。コード:

money = open("money.txt", "r")
moneyx = float(money)
print(moneyx)

テキストファイルmoney.txtには、これのみが含まれています。

0.00

表示されるエラーメッセージは次のとおりです。

TypeError: float() argument must be a string or a number

ほとんどの場合、単純な間違いです。何かアドバイス?私はPython 3.3.3。

11
Pancake_Senpai

moneyfileオブジェクトnotファイルのコンテンツです。コンテンツを取得するには、ファイルをreadする必要があります。ファイル全体にその1つの数値のみが含まれている場合、必要なのは read() だけです。

_moneyx = float(money.read())
_

それ以外の場合は、 readline() を使用して1行を読み取るか、より複雑なファイルに対して csv モジュールを試してください。

また、完了したらファイルを close() することを忘れないでください。または、withキーワードを使用して自動的に閉じてください。

_with open("money.txt") as money:
    moneyx = float(money.read())
print(moneyx)
_
12
tobias_k

Moneyは文字列ではなくファイルなので、ファイル全体をfloatに変換することはできません。代わりに、ファイル全体をリストに読み込み、各行がリスト内のアイテムである、このようなことを行うことができます。ループして、そのように変換します。

money = open("money.txt", "r")
lines = money.readlines()
for l in lines:
   moneyx = float(l)
   print(moneyx)
4
heinst

Pythonでファイルを開くときに「with」を使用することをお勧めします。このように、操作が完了するとファイルは暗黙的に閉じられます

with open("money.txt", "r") as f:
    content = f.readlines()
    for line in content:
        print float(line)
0
itzhaki