पायथन स्ट्रिंग प्रिंट [u'String ']


142

यह निश्चित रूप से एक आसान होगा लेकिन यह वास्तव में मुझे परेशान कर रहा है।

मेरे पास एक स्क्रिप्ट है जो एक वेबपेज में पढ़ती है और इसे पार्स करने के लिए ब्यूटीफुल सूप का उपयोग करती है। से सूप मैं सभी लिंक निकालें के रूप में अपने अंतिम लक्ष्य link.contents बाहर मुद्रित करने के लिए है।

मेरे द्वारा पार्सिंग किए गए सभी पाठ ASCII हैं। मुझे पता है कि पायथन स्ट्रिंग्स को यूनिकोड के रूप में मानता है, और मुझे यकीन है कि यह बहुत उपयोगी है, सिर्फ मेरी वेपन लिपि में इसका कोई उपयोग नहीं है।

हर बार जब मैं एक चर को प्रिंट करने जाता हूं जो 'स्ट्रिंग' रखता है तो मैं [u'String']स्क्रीन पर प्रिंट हो जाता हूं । क्या यह वापस पाने के लिए सिर्फ आस्की में एक सरल तरीका है या क्या मुझे इसे उतारने के लिए एक रेगीक्स लिखना चाहिए?


बहुत अधिक स्पष्ट रूप से
लिखे गए

क्या इससे आपके सवाल का जवाब मिलता है? पायथन स्ट्रिंग में यू प्रीफिक्स क्या है?
Terrabits 23:21

जवाबों:


118

[u'ABC']यूनिकोड स्ट्रिंग्स की एक-तत्व सूची होगी। सुंदर सूप हमेशा यूनिकोड का उत्पादन करता है । इसलिए आपको सूची को एकल यूनिकोड स्ट्रिंग में परिवर्तित करने की आवश्यकता है, और फिर उसे ASCII में परिवर्तित करें।

मुझे नहीं पता कि आपको एक-तत्व सूची कैसे मिली; सामग्री सदस्य स्ट्रिंग्स और टैग्स की एक सूची होगी, जो स्पष्ट रूप से आपके पास नहीं है। यह मानते हुए कि आप वास्तव में हमेशा एक ही तत्व के साथ एक सूची प्राप्त करते हैं, और यह कि आपका परीक्षण वास्तव में केवल ASCII है जो आप इसका उपयोग करेंगे:

 soup[0].encode("ascii")

हालाँकि, कृपया यह जांचें कि आपका डेटा वास्तव में ASCII है। यह बहुत दुर्लभ है। बहुत अधिक संभावना है कि यह लैटिन -1 या utf-8 है।

 soup[0].encode("latin-1")


 soup[0].encode("utf-8")

या आप सुंदर सूप से पूछें कि मूल एन्कोडिंग क्या थी और इसे इस एन्कोडिंग में वापस मिला:

 soup[0].encode(soup.originalEncoding)

6
आपको वास्तव में एन्कोडिंग करने की आवश्यकता नहीं है, क्योंकि ओपी केवल स्ट्रिंग को देख रहा है क्योंकि जब आप सूची को प्रिंट करते हैं, तो आपको कुछ भी दिखाई देता है। सूप [0] स्ट्रिंग की सामग्री दिखाने के लिए, स्ट्रिंग की सामग्री दिखा रहा है और बोली और यूनिकोड संशोधक नहीं।
आयरनफ्रॉग्जी

2
आपको ज्यादातर मामलों में यूनिकोड के बाइट्स के रूप में प्रस्तुत पाठ को एनकोड नहीं करना चाहिए: आपको सीधे print(', '.join([u'ABC' , u'...']))
यूथोड

26

आपके पास शायद एक सूची है जिसमें एक यूनिकोड स्ट्रिंग है। इस reprका है [u'String']

आप इसे निम्न में से किसी भी भिन्नता का उपयोग करके बाइट स्ट्रिंग्स की सूची में बदल सकते हैं:

# Functional style.
print map(lambda x: x.encode('ascii'), my_list)

# List comprehension.
print [x.encode('ascii') for x in my_list]

# Interesting if my_list may be a tuple or a string.
print type(my_list)(x.encode('ascii') for x in my_list)

# What do I care about the brackets anyway?
print ', '.join(repr(x.encode('ascii')) for x in my_list)

# That's actually not a good way of doing it.
print ' '.join(repr(x).lstrip('u')[1:-1] for x in my_list)

1
कृपया, इस तरह की भयावहता से बचें repr(x).lstrip('u')[1:-1]। कुछ का उपयोग करें: print ", ".join(my_list)इसके बजाय, यूनिकोड स्ट्रिंग्स की एक सूची को प्रारूपित करने के लिए।
jfs

1
टिप्पणी, यह कहता है: "यह वास्तव में इसे करने का एक अच्छा तरीका नहीं है"। यह यहाँ सिर्फ लोलज़ के लिए है!
ddaa

9
import json, ast
r = {u'name': u'A', u'primary_key': 1}
ast.literal_eval(json.dumps(r)) 

छप जाएगा

{'name': 'A', 'primary_key': 1}

1
यह विधि मुझे बहुत प्यारी लगती है, वोट क्यों नहीं? किसी भी प्रदर्शन प्रभाव के बारे में हमें चिंता करनी चाहिए?
jrich523

8

यदि एकल तत्व सूचियों को एक्सेस / प्रिंट करना (जैसे, क्रमिक रूप से या फ़िल्टर किया गया):

my_list = [u'String'] # sample element
my_list = [str(my_list[0])]

1
आप एक सूची समझने की कोशिश करते हैं:my_list = [str(my_list[x]) for x in range(len(my_list))]
gevang

4

str () फ़ंक्शन को आउटपुट पास करें और यह यूनिकोड आउटपुट को कन्वर्ट करेगा। आउटपुट को प्रिंट करके भी यह उसमें से u '' टैग हटा देगा।


4

[u'String'] एक सूची का एक पाठ प्रतिनिधित्व है जिसमें अजगर 2 पर एक यूनिकोड स्ट्रिंग है।

आप चलाते हैं print(some_list)तो यह के बराबर है
print'[%s]' % ', '.join(map(repr, some_list))यानी, प्रकार के साथ एक अजगर वस्तु का एक पाठ प्रतिनिधित्व बनाने के लिए list, repr()समारोह प्रत्येक आइटम के लिए कहा जाता है।

एक पायथन ऑब्जेक्ट और उसके पाठ प्रतिनिधित्व को भ्रमित न करें - repr('a') != 'a'और यहां तक ​​कि पाठ प्रतिनिधित्व का पाठ प्रतिनिधित्व भी अलग है repr(repr('a')) != repr('a'):।

repr(obj)ऐसी स्ट्रिंग देता है जिसमें किसी ऑब्जेक्ट का प्रिंट करने योग्य प्रतिनिधित्व होता है। इसका उद्देश्य किसी ऑब्जेक्ट का एक स्पष्ट प्रतिनिधित्व है जो डीबगिंग के लिए उपयोगी हो सकता है, एक REPL में। अक्सर eval(repr(obj)) == obj

बुला से बचने के लिए repr(), आप सूची के आइटम सीधे प्रिंट कर सकता है (अगर वे सभी यूनिकोड तार कर रहे हैं) जैसे: print ",".join(some_list)-यह प्रिंट एक अल्पविराम से अलग तार की सूची:String

हार्डकोड कोडिंग एन्कोडिंग का उपयोग करके यूनिकोड स्ट्रिंग को बाइट्स में एनकोड न करें, इसके बजाय सीधे यूनिकोड प्रिंट करें । अन्यथा, कोड विफल हो सकता है क्योंकि एन्कोडिंग सभी वर्णों का प्रतिनिधित्व नहीं कर सकता है, यदि आप 'ascii'गैर-एससीआई वर्णों के साथ एन्कोडिंग का उपयोग करने का प्रयास करते हैं । या कोड चुपचाप मोजिबेक पैदा करता है (दूषित डेटा को एक पाइपलाइन में आगे पारित किया जाता है) यदि पर्यावरण एक एन्कोडिंग का उपयोग करता है जो हार्डकोडेड एन्कोडिंग के साथ असंगत है।


3

'स्ट्रिंग' पर प्रयोग करें dirया typeपता करें कि यह क्या है। मुझे संदेह है कि यह सुंदरसुपर के टैग ऑब्जेक्ट्स में से एक है, जो एक स्ट्रिंग की तरह प्रिंट करता है, लेकिन वास्तव में एक नहीं है। अन्यथा, इसकी एक सूची के अंदर और आपको प्रत्येक स्ट्रिंग को अलग से बदलने की आवश्यकता है।

किसी भी मामले में, आप यूनिकोड का उपयोग करने पर आपत्ति क्यों कर रहे हैं? कोई खास वजह?


मैं पिछले कुछ दिनों से सुंदरसुपे को देख रहा हूं। मैं यह पता नहीं लगा सका कि gnuchu को u ['string'] नहीं मिलेगा [u'String ']। एंड्रयू जाफ के लिए उनकी टिप्पणी यह ​​साबित करती है कि यह एक सूची है।
बैटब्रैट

3

क्या आपका वास्तव में मतलब है? u'String' ?

किसी भी घटना में, आप केवल str(string)यूनिकोड-स्ट्रिंग के बजाय एक स्ट्रिंग प्राप्त करने के लिए नहीं कर सकते हैं ? (यह पायथन 3 के लिए अलग होना चाहिए, जिसके लिए सभी तार यूनिकोड हैं।)


मैं और भी स्पष्ट हो सकता था। मैं स्ट्रैप () का उपयोग कर रहा हूं लेकिन फिर भी जब मैं प्रिंट करता हूं तो नीचे आउटपुट मिलता है। [u'ABC '] [u'DEF'] [u'GHI ’] [u'JKL’] डेटा को वेबपेज से पाठ के रूप में छीन लिया जाता है, फिर एक डेटाबेस (Google Appstore) में डाला जाता है, फिर पुनर्प्राप्त और मुद्रित किया जाता है।
११:०१ पर ग्नूचु

-1

encode("latin-1") मेरे मामले में मेरी मदद की:

facultyname[0].encode("latin-1")

-1

शायद मुझे समझ में नहीं आता, तुम क्यों नहीं कर सकते हो बस तत्व .text और फिर इसे उपयोग करने से पहले इसे परिवर्तित? उदाहरण के लिए (न जाने क्यों आप ऐसा करेंगे लेकिन ...) वेब पेज के सभी लेबल तत्वों को खोजें और जब तक आप MyText नामक एक को नहीं पा लेते तब तक उन दोनों के बीच इसे टाइप करें।

        avail = []
        avail = driver.find_elements_by_class_name("label");
        for i in avail:
                if  i.text == "MyText":

स्ट्रिंग को i से रूपांतरित करें और आप जो करना चाहते थे वह करें ... शायद मूल संदेश में कुछ याद आ रहा है? या यह क्या आप के लिए देख रहे थे?


आपको वह भाग याद आ रहा है जहाँ सवाल यह है कि कैसे करें "आई से स्ट्रिंग बदलें"।
नाथन तुग्गी

आह, सभी टिप्पणियों से धन्यवाद मुझे लगा कि समस्या को परिवर्तित करने का मूल्य मिल रहा है
स्टीवन

लेकिन उचित होने के लिए i.text वास्तविक स्ट्रिंग मान है, "किसी सरणी से इसे खींचने की कोई आवश्यकता नहीं है" जैसे कुछ लोगों ने सुझाव दिया कि उदाहरण के लिए लेबल एलिमेट का पाठ मूल्य है [u'String '] i.text स्ट्रिंग होगा
स्टीवन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.