herhangi bir veri türü python bir dize nasıl değiştirilir


135

Herhangi bir veri türünü Python'da bir dizeye nasıl değiştirebilirim?


10
str(var)? Aradığın şey bu mu?
SilentGhost

2
Verilerin insan tarafından okunabilir bir dize olarak temsil edilmesini ister misiniz? Veya verileri içeren belleğin bayt odaklı bir görünümünü mi istiyorsunuz?
Jeremy Brown

Değiştirmek istediğiniz verilerin türüne dikkat edin. Aşağıdaki cevaba bakınız
PythoNic

Yanıtlar:


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

ayrıca, alternatif olarak repr'yi deneyin:

mystring = repr(myvariable) # '4'

Buna python'da "dönüşüm" denir ve oldukça yaygındır.


6
Ben repr (myvariable) kullanmak olmaz - genellikle sınıf türü, bellek adresi vb hakkında bilgi döndürür. Hata ayıklama için daha yararlıdır. Dizeye dönüştürmek için str (değişken) ve unicode'a dönüştürmek için unicode (değişken) kullanın.
Abgan

2
Unicode ne olacak? Gibi bir şey str(u'ä')işe yaramaz. Ancak repr(u'ä')işe yarayacaktır.
Rouven

1
Ya Yok ve Yanlış?
fredless

54

str"Nesne", nesnenin verilerinin dize ile temsil edilen bir gösterimidir. Kendi sınıfınızı yazıyorsanız ve sizin striçin çalışmak istiyorsanız şunu ekleyin:

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

print str(myObj)arayacak myObj.__str__().

reprsınıf bilgisi hakkında genellikle bilgi üreten benzer bir yöntemdir. Çoğu çekirdek kütüphane nesnesi repriçin açılı ayraçlar arasında sınıf adı (ve bazen de bazı sınıf bilgileri) üretir. reprörneğin, nesnenizi etkileşim bölmesine yalnızca kullanmadan etkileşim bölmesine yazarak kullanılırprint herhangi bir şey veya başka bir şey .

Sen davranışını tanımlayabilirsiniz reprsen davranışını tanımlayabilirsiniz gibi kendi nesneler için str:

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

>>> myObjEtkileşimlerinizin bölmesinde veya repr(myObj), sonuçlanacaktırmyObj.__repr__()


Çekirdek kütüphane nesnelerinin çoğunun ham yüzdeyle çoğunluğunun object.__repr__-style açılı ayraç temsilini döndürdüğü doğrudur , ancak en çok kullanılanların çoğunun geri dönmediği doğrudur . İçin temel kural reprolduğunu o aynı nesneyi üretmek için değerlendirilebilir olabilir Python kodunu dönmek için mantıklı eğer, yapmak gibi str, frozensetve diğer birçok yerleşikleri, ama eğer bu olmuyorsa, açı-parantez kullanın Geri dönüşünüzün, insan tarafından okunabilir ve değerlendirilebilir bir kaynak olarak karıştırılamayacağından emin olmak için
abarnert

(Tabii ki, bazı yerleşikler bu başparmak kuralını ihlal ediyor - listkendini içeren bir şey sadece benzeyen değil, yanlış bir şey olarak değerlendirilen değerlendirilebilir kod olan bir şey döndürüyor - ancak çekirdek geliştiriciler bunu asla genişletmek için lisans olarak almadı stdlib içine davranış.)
abarnert

19

Tüm yanıtları kullanmanızı öneririm str(object). Nesnenizde ascii karakterlerinden daha fazlası varsa başarısız olabilir ve hata göreceksiniz ordinal not in range(128). İngilizce dışındaki bir dilde dize listesini dönüştürürken benim için durum buydu

Kullanarak çözdüm unicode(object)


7
Python 3.0'dan itibaren, str (nesne) varsayılan olarak unicode yapar
dmjalund

13

str(object) hile yapacak.

Nesnenin dizge biçimini değiştirmek istiyorsanız, __str__(self)nesnenin sınıfı için yöntem tanımlayın . Bu yöntem str veya unicode nesnesini döndürmelidir.


Hangi yöntem etkilidir? str(any_var)veyaany_var.__str__()
Kedar.Aitawdekar

@ Kedar.Aitawdekar: Yürütme zamanında gözle görülür bir fark olsa bile (ki şüpheliyim, ancak timeitmodülü kullanarak doğrulamanızı öneririm ), str(any_var)insan için daha okunabilir olduğundan ve any_vartanımlayan __repr__()ancak tanımlanmayan durumlardan faydalanmaya izin verdiği için kullanmalısınız. t tanımlayın __str__().
Abgan

Cevabın için teşekkürler.
Kedar.Aitawdekar

12

Yerleşik strolanı kullanın :

x = str(something)

Örnekler:

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

...

Belgelerden:

Bir nesnenin güzel yazdırılabilir bir gösterimini içeren bir dize döndürün. Dizeler için bu, dizenin kendisini döndürür. Repr (object) ile fark, str (object) öğesinin her zaman eval () için kabul edilebilir bir dize döndürmeye çalışmamasıdır; hedefi yazdırılabilir bir dize döndürmektir. Herhangi bir argüman verilmezse, boş dizeyi döndürür ''.


5

İle str(x). Bununla birlikte, her veri türü kendi dize dönüşümünü tanımlayabilir, bu yüzden istediğiniz şey olmayabilir.


3
Bu önemli ancak nadir bir konudur. Bahsettiğiniz güzel.
jathanizm



0

Biçimlendirmeyi kullan:

"%s" % (x)

Misal:

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

Çıktı: Prş 11 Oca 20:40:05 2018


0

Veri türünü gerçekten "değiştirmek" istiyorsanız dikkatli olun. Diğer durumlarda olduğu gibi (örneğin bir fordöngüdeki yineleyiciyi değiştirmek ) bu beklenmedik davranışlar ortaya çıkarabilir:

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.