Pythonでデータ型を文字列に変更する方法


135

Pythonでデータ型を文字列に変更するにはどうすればよいですか?


10
str(var)?それがあなたが探しているものですか?
SilentGhost 2010

2
人間が読み取れるデータの文字列表現が必要ですか?または、データを含むメモリのバイト指向のビューが必要ですか?
ジェレミーブラウン

変更するデータのタイプに注意してください。以下の回答を参照してください
PythoNic

回答:


126
myvariable = 4
mystring = str(myvariable)  # '4'

また、代わりにreprを試してください:

mystring = repr(myvariable) # '4'

これはPythonでは「変換」と呼ばれ、非常に一般的です。


6
私はrepr(myvariable)を使用しません-クラスのタイプ、メモリアドレスなどに関する情報を返すことがよくあります。デバッグにはさらに便利です。文字列への変換にはstr(myvariable)を使用し、Unicodeへの変換にはunicode(variable)を使用します。
Abgan

2
ユニコードはどうですか?のようなものstr(u'ä')が機能しません。しかしrepr(u'ä')動作します。
ルーベンB.

1
なしと偽はどうですか?
フレッドレス、

54

strオブジェクトのデータの文字列表現を生成するためのものです。独自のクラスを作成していて、あなたのstrために働きたいのであれば、以下を追加してください:

def __str__(self):
    return "Some descriptive string"

print str(myObj)を呼び出しますmyObj.__str__()

repr同様のメソッドで、通常はクラス情報に関する情報を生成します。ほとんどのコアライブラリオブジェクトの場合、repr山かっこの間にクラス名(および場合によってはクラス情報)を生成します。reprたとえば、print何も使用せずに、インタラクションペインにオブジェクトを入力するだけで使用されます。

の動作を定義できるのとrepr同じように、独自のオブジェクトのの動作を定義できますstr

def __repr__(self):
    return "Some descriptive string"

>>> myObjインタラクションペインまたはでrepr(myObj)myObj.__repr__()


コアライブラリオブジェクトの大部分が未加工のパーセンテージでobject.__repr__-スタイルの山かっこ表現を返すことは事実ですが、最も一般的に使用されるものの多くはそうではありません。経験則でreprは、同じオブジェクトを生成するために評価できるPythonコードを返すのが理にかなっている場合は、、、および他のほとんどの組み込み関数と同じようstrfrozensetそれを行いますが、そうでない場合は山かっこを使用します返されたものを、人間が読み取って評価できるソースとしての表現と間違えないようにするためのフォーム。
abarnert 2018年

(もちろん、一部のビルトインはその経験則に違反してlistいます。それ自体が含まれているように見えるだけでなく、評価可能なコードであり、評価が間違っているものを返しますが、コア開発者はこれをライセンスとして使用して、同じものを拡張していませんstdlibへの動作。)
abarnert 2018年

19

すべての回答での使用を推奨していstr(object)ます。オブジェクトにASCII文字以外の文字が含まれていると失敗し、のようなエラーが表示されますordinal not in range(128)。これは私が英語以外の言語で文字列のリストを変換しているときに当てはまりました

私はそれを使って解決しました unicode(object)


7
Python 3.0以降では、str(object)はデフォルトでユニコードを実行します
dmjalund

13

str(object) トリックを行います。

オブジェクトの文字列化の方法を変更する場合は__str__(self)、オブジェクトのクラスのメソッドを定義します。このようなメソッドはstrまたはunicodeオブジェクトを返す必要があります。


どの方法が効率的ですか?str(any_var)またはany_var.__str__()
Kedar.Aitawdekar 2016

@ Kedar.Aitawdekar:そこに顕著な違いは、(私は疑っているが、私は使用してそれをvefiryすることをお勧めします実行時間であってもtimeitモジュール)を、あなたが使用する必要がありstr(any_var)、それは人間のために、より読みやすいですしたときに例の恩恵を受けることができますので、any_var定義__repr__()が、doesnの」 tを定義します__str__()
Abgan、

お返事をありがとうございます。
Kedar.Aitawdekar

12

str組み込みを使用:

x = str(something)

例:

>>> str(1)
'1'
>>> str(1.0)
'1.0'
>>> str([])
'[]'
>>> str({})
'{}'

...

ドキュメントから:

オブジェクトの適切に印刷可能な表現を含む文字列を返します。文字列の場合、これは文字列自体を返します。repr(object)との違いは、str(object)が常にeval()に受け入れ可能な文字列を返そうとするわけではないことです。その目的は、印刷可能な文字列を返すことです。引数を指定しない場合、空の文字列 ''を返します。


5

str(x)。ただし、すべてのデータ型で独自の文字列変換を定義できるため、これが目的とは異なる場合があります。


3
これは重要ですがまれな考慮事項です。いいですね。
ジェサニズム



0

書式を使用:

"%s" % (x)

例:

x = time.ctime(); str = "%s" % (x); print str

出力: 2018年1月11日木曜日20:40:05


0

データ型を本当に「変更」したい場合は注意してください。他の場合と同様に(forループ内でイテレーターを変更するなど)、これは予期しない動作を引き起こす可能性があります。

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.