bagaimana mengubah tipe data menjadi string dengan python

140

Bagaimana saya bisa mengubah tipe data apa pun menjadi string dengan Python?

duhhunjonn
sumber
10
str(var)? apakah itu yang kamu cari?
SilentGhost
2
Apakah Anda menginginkan representasi string data yang dapat dibaca manusia? Atau apakah Anda ingin tampilan berorientasi byte dari memori yang berisi data?
Jeremy Brown
Hati-hati dengan jenis data yang ingin Anda ubah. Lihat jawaban di bawah
PythoNic
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker

Jawaban:

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

juga, sebagai alternatif coba repr:

mystring = repr(myvariable) # '4'

Ini disebut "konversi" dalam python, dan cukup umum.

Donald Miner
sumber
6
Saya tidak akan menggunakan repr (myvariable) - sering mengembalikan informasi tentang jenis kelas, alamat memori, dll. Ini lebih berguna untuk debugging. Gunakan str (myvariable) untuk konversi ke string dan unicode (variabel) untuk konversi ke unicode.
Abgan
3
Bagaimana dengan unicode? Sesuatu seperti str(u'ä')tidak akan berhasil. Namun repr(u'ä')akan berhasil.
Rouven B.
1
bagaimana dengan None dan False?
fredless
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
57

strdimaksudkan untuk menghasilkan representasi string dari data objek. Jika Anda menulis kelas Anda sendiri dan ingin strbekerja untuk Anda, tambahkan:

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

print str(myObj)akan menelepon myObj.__str__().

repradalah metode serupa, yang umumnya menghasilkan informasi tentang info kelas. Untuk sebagian besar objek perpustakaan inti, reprmenghasilkan nama kelas (dan terkadang beberapa informasi kelas) di antara tanda kurung sudut. reprakan digunakan, misalnya, dengan hanya mengetik objek Anda ke panel interaksi Anda, tanpa menggunakan printatau apa pun.

Anda dapat menentukan perilaku objek reprAnda sendiri seperti Anda dapat mendefinisikan perilaku str:

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

>>> myObjdi panel interaksi Anda, atau repr(myObj), akan menghasilkanmyObj.__repr__()

Brian S
sumber
Mungkin benar bahwa sebagian besar objek perpustakaan inti dengan persentase mentah mengembalikan object.__repr__representasi kurung sudut-gaya, tetapi banyak yang paling umum digunakan tidak. Aturan praktis untuk repradalah bahwa jika masuk akal untuk kembali kode Python yang dapat dievaluasi untuk menghasilkan objek yang sama, melakukan itu, seperti str, frozenset, dan sebagian besar builtin lain lakukan, tetapi jika tidak, menggunakan sudut-braket formulir untuk memastikan bahwa apa yang Anda kembalikan tidak mungkin disalahartikan sebagai repr yang dapat dibaca manusia-dan-dapat dievaluasi-sebagai-sumber.
abarnert
(Tentu saja beberapa builtin melanggar aturan umum itu — a listyang menyertakan dirinya sendiri mengembalikan sesuatu yang tidak hanya terlihat seperti tetapi juga kode yang dapat dievaluasi, yang mengevaluasi ke hal yang salah — tetapi pengembang inti tidak pernah menganggapnya sebagai lisensi untuk memperluas yang sama perilaku ke stdlib.)
abarnert
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
@Yaelahcan __str__adalah fungsi yang diwarisi dari kelas objek, yang merupakan root untuk semua kelas lain dengan Python. docs.python.org/3/reference/datamodel.html#object.__str__
Brian S
19

Saya melihat semua jawaban merekomendasikan penggunaan str(object). Ini mungkin gagal jika objek Anda memiliki lebih dari karakter ascii dan Anda akan melihat kesalahan sepertiordinal not in range(128) . Ini adalah kasus saya ketika saya mengonversi daftar string dalam bahasa selain bahasa Inggris

Saya menyelesaikannya dengan menggunakan unicode(object)

Madhav
sumber
7
di Python 3.0 dan seterusnya, str (object) melakukan unicode secara default
dmjalund
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
13

str(object) akan melakukan triknya.

Jika Anda ingin mengubah cara objek dirangkai, tentukan __str__(self)metode untuk kelas objek. Metode tersebut harus mengembalikan str atau objek unicode.

Abgan
sumber
Metode mana yang efisien? str(any_var)atauany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Meskipun ada perbedaan yang mencolok dalam waktu eksekusi (yang saya ragu, tapi saya mendorong Anda untuk menyimpannya menggunakan timeitmodul), Anda harus menggunakan str(any_var)karena lebih mudah dibaca oleh manusia dan memungkinkan untuk mendapatkan keuntungan dari kasus-kasus ketika any_varmendefinisikan __repr__()tetapi tidak t mendefinisikan __str__().
Abgan
Terima kasih untuk balasan Anda.
Kedar.Aitawdekar
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
12

Gunakan strbuilt-in:

x = str(something)

Contoh:

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

...

Dari dokumentasi:

Kembalikan string yang berisi representasi objek yang dapat dicetak dengan baik. Untuk string, ini mengembalikan string itu sendiri. Perbedaan dengan repr (object) adalah bahwa str (object) tidak selalu berusaha untuk mengembalikan string yang dapat diterima eval (); tujuannya adalah mengembalikan string yang dapat dicetak. Jika tidak ada argumen yang diberikan, kembalikan string kosong, ''.

miku
sumber
apakah setiap kelas / tipe dalam python selalu memungkinkan struntuk dipanggil tanpa kesalahan?
Charlie Parker
5

Dengan str(x). Namun, setiap tipe data dapat menentukan konversi stringnya sendiri, jadi ini mungkin bukan yang Anda inginkan.

Philipp
sumber
3
Ini adalah pertimbangan yang penting namun jarang. Baik bahwa Anda menyebutkannya.
Jatanisme
3

Anda bisa menggunakan %sseperti di bawah ini

>>> "%s" %([])
'[]'
SuperNova
sumber
1

Cukup gunakan str- misalnya:

>>> str([])
'[]'
Justin Ethier
sumber
0

Gunakan pemformatan:

"%s" % (x)

Contoh:

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

Output: Kam 11 Jan 20:40:05 2018

Apostolos
sumber
0

Berhati-hatilah jika Anda benar-benar ingin "mengubah" tipe data. Seperti dalam kasus lain (misalnya mengubah iterator dalam satu forlingkaran) ini mungkin memunculkan perilaku yang tidak terduga:

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
PythoNic
sumber