अजगर में किसी डेटा प्रकार को स्ट्रिंग में कैसे बदला जाए


135

मैं किसी भी डेटा प्रकार को पायथन में स्ट्रिंग में कैसे बदल सकता हूं?


10
str(var)? यह है कि तुम क्या देख रहे हो?
साइलेंटगॉस्ट जूल

2
क्या आप डेटा का मानव-पठनीय स्ट्रिंग प्रतिनिधित्व चाहते हैं? या क्या आप डेटा युक्त मेमोरी का बाइट-ओरिएंटेड व्यू चाहते हैं?
जेरेमी ब्राउन

उस डेटा के प्रकार से सावधान रहें जिसे आप बदलना चाहते हैं। नीचे उत्तर देखें
PythoNic

जवाबों:


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

इसके अलावा, वैकल्पिक रूप से पुन: प्रयास करें:

mystring = repr(myvariable) # '4'

इसे अजगर में "रूपांतरण" कहा जाता है, और यह काफी सामान्य है।


6
मैं repr (myvariable) का उपयोग नहीं करूंगा - यह अक्सर वर्ग प्रकार, मेमोरी एड्रेस आदि के बारे में जानकारी देता है। यह डीबगिंग के लिए अधिक उपयोगी है। यूनिकोड में रूपांतरण के लिए स्ट्रिंग और यूनिकोड (चर) में रूपांतरण के लिए str (myvariable) का उपयोग करें।
अबुल

2
यूनिकोड के बारे में क्या? जैसे कुछ str(u'ä')काम नहीं करेगा। हालांकि repr(u'ä')काम करेंगे।
रूवेन बी।

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है कि अगर यह समझ में आता है, अजगर कोड है कि एक ही वस्तु का उत्पादन करने का मूल्यांकन किया जा सकता है वापस जाने के लिए है कि, जैसे str, frozenset, और अधिकांश अन्य builtins करते हैं, लेकिन अगर ऐसा नहीं होता, कोण कोष्ठक का उपयोग करें यह सुनिश्चित करने के लिए कि आप जो वापसी करते हैं वह संभवतः मानव-पठनीय और मूल्यांकन योग्य-जैसे-स्रोत के लिए गलत नहीं हो सकता।
गाली

(बेशक कुछ बिल्डरों ने अंगूठे के उस नियम का उल्लंघन किया है - listजिसमें खुद में कुछ ऐसा शामिल है जो न केवल दिखता है बल्कि मूल्यांकन योग्य कोड है, जो गलत चीज़ का मूल्यांकन करता है - लेकिन मुख्य देवता ने कभी नहीं लिया है कि उसी के विस्तार के लिए लाइसेंस के रूप में stdlib में व्यवहार करें।)
खत्म करें

19

मुझे लगता है कि सभी उत्तर का उपयोग करने की सलाह देते हैं str(object)। यह विफल हो सकता है यदि आपकी वस्तु में एएससीआई अक्षर अधिक हैं और आपको त्रुटि दिखाई देगी ordinal not in range(128)। यह मेरे लिए मामला था जब मैं अंग्रेजी के अलावा अन्य भाषा में स्ट्रिंग की सूची परिवर्तित कर रहा था

मैंने इसका उपयोग करके हल किया unicode(object)


7
पायथन 3.0 आगे, str (ऑब्जेक्ट) डिफ़ॉल्ट रूप से यूनिकोड करता है
dmjalund

13

str(object) चाल चलेगा।

यदि आप ऑब्जेक्ट को कड़ाई से बदलना चाहते हैं, तो __str__(self)ऑब्जेक्ट की कक्षा के लिए विधि को परिभाषित करें । ऐसी विधि से str या यूनिकोड ऑब्जेक्ट को वापस करना होगा।


कौन सी विधि कुशल है? str(any_var)याany_var.__str__()
केदार.आतवडेकर

@ Kedar.Aitawdekar: यहां तक कि अगर वहाँ निष्पादन समय में उल्लेखनीय अंतर है (जो मुझे शक है, लेकिन मैं आप का उपयोग कर यह vefiry करने के लिए प्रोत्साहित timeitमॉड्यूल), आप का उपयोग करना चाहिए str(any_var), क्योंकि यह मामलों से मानव के लिए अधिक पठनीय है और लाभ के लिए अनुमति देता है जब any_varपरिभाषित करता है __repr__(), लेकिन नहीं करता है ' टी को परिभाषित __str__()
अबगन

आपके जवाब के लिए धन्यवाद।
केदार.आतवडेकर

12

strअंतर्निहित का उपयोग करें :

x = str(something)

उदाहरण:

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

...

प्रलेखन से:

किसी वस्तु की अच्छी तरह से मुद्रण योग्य प्रतिनिधित्व युक्त स्ट्रिंग लौटें। स्ट्रिंग्स के लिए, यह स्ट्रिंग को स्वयं लौटाता है। Repr (object) के साथ अंतर यह है कि str (ऑब्जेक्ट) हमेशा स्ट्रिंग को वापस करने का प्रयास नहीं करता है जो कि eval () के लिए स्वीकार्य है; इसका लक्ष्य एक मुद्रण योग्य स्ट्रिंग वापस करना है। यदि कोई तर्क नहीं दिया जाता है, तो खाली स्ट्रिंग लौटाता है, ''।


5

के साथ str(x)। हालाँकि, प्रत्येक डेटा प्रकार अपने स्वयं के स्ट्रिंग रूपांतरण को परिभाषित कर सकता है, इसलिए यह वह नहीं हो सकता जो आप चाहते हैं।


3
यह एक महत्वपूर्ण अभी तक दुर्लभ विचार है। अच्छा है कि आपने इसका उल्लेख किया।
१५:५० पर जथनवाद j



0

स्वरूपण का उपयोग करें:

"%s" % (x)

उदाहरण:

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

आउटपुट: थू जन ११ 20:40:05 2018


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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.