python - पायथन का उपयोग कर तारों से गैर-ब्रेकिंग रिक्त स्थान को हटा रहा है





string unicode text (5)


कृपया ध्यान दें कि एक साधारण myString.strip() न केवल रिक्त स्थान को हटाएगा, बल्कि मेरी स्ट्रिंग की शुरुआत और अंत से गैर-ब्रेकिंग-रिक्त स्थान भी हटा देगा। ओपी ने बिल्कुल क्या नहीं पूछा, लेकिन अभी भी कई मामलों में बहुत आसान है।

मुझे पाइथन में एक बहुत ही बुनियादी स्ट्रिंग समस्या के साथ कुछ परेशानी हो रही है (जिसे मैं समझ नहीं सकता)। असल में, मैं निम्नलिखित करने की कोशिश कर रहा हूं:

'# read file into a string 
myString =  file.read()

'# Attempt to remove non breaking spaces 
myString = myString.replace("\u00A0"," ")

'# however, when I print my string to output to console, I get: 
Foo **<C2><A0>** Bar

मैंने सोचा कि "\ u00A0" यूनिकोड नॉन ब्रेकिंग रिक्त स्थान के लिए एस्केप कोड था, लेकिन स्पष्ट रूप से मैं इसे ठीक से नहीं कर रहा हूं। मैं क्या गलत कर रहा हूँ पर कोई विचार?




आपके पास यूनिकोड स्ट्रिंग नहीं है, लेकिन बाइट्स की एक यूटीएफ -8 सूची (जो स्ट्रिंग्स पायथन 2.x में हैं)।

प्रयत्न

myString = myString.replace("\xc2\xa0", " ")

यूनिकोड पर स्विच करना बेहतर होगा - इस आलेख को विचारों के लिए देखें। इस प्रकार आप कह सकते हैं

uniString = unicode(myString, "UTF-8")
uniString = uniString.replace(u"\u00A0", " ")

और इसे भी काम करना चाहिए (चेतावनी: मेरे पास अभी पाइथन 2.x उपलब्ध नहीं है), हालांकि इसे फ़ाइल में भेजते समय इसे स्क्रीन पर प्रिंट करते समय इसे बाइट्स (बाइनरी) में अनुवाद करने की आवश्यकता होगी।




आपके द्वारा लिखे गए किसी भी संकेत में कोई संकेत नहीं है कि आप कुछ भी गलत कर रहे हैं: यदि मूल स्ट्रिंग में 'फू' और 'बार' के बीच एक गैर-ब्रेकिंग स्पेस थी, तो आपके पास अब वहां एक सामान्य स्थान है। यह मानता है कि किसी बिंदु पर आपने अपनी इनपुट स्ट्रिंग को डीकोड किया है (जो मुझे लगता है कि एक पायदान है, जब तक कि आप पाइथन 3 पर नहीं हैं या codecs मॉड्यूल से फ़ंक्शन के साथ file खोला गया हो) यूनिकोड स्ट्रिंग में, अन्यथा आप असंभव हैं replace के प्रयोजनों के लिए बाइट्स की गैर-यूनिकोड स्ट्रिंग में यूनिकोड वर्ण का पता लगाने के replace । लेकिन फिर भी, आप जो लिखते हैं उसमें समस्याओं का कोई स्पष्ट संकेत नहीं है।

क्या आप स्पष्टीकरण के ठीक पहले इनपुट (प्रिंट repr(myString) क्या स्पष्टीकरण दे सकते हैं) और आउटपुट (प्रिंट repr(myString) को प्रतिस्थापित करने के ठीक बाद फिर से क्या है) और आपको ऐसा क्यों लगता है कि यह एक समस्या है? repr बिना, वास्तव में अलग तारों को एक ही लग सकता है, लेकिन repr वहाँ मदद करता है।




नहीं, u"\u00A0" गैर-ब्रेकिंग रिक्त स्थान के लिए एस्केप कोड है। "\u00A0" 6 वर्ण हैं जो किसी भी प्रकार का एस्केप कोड नहीं हैं। इसे पढ़ें




यदि आप किसी अन्य शब्द के भीतर निहित एक सबस्ट्रिंग के बजाय पूरे शब्दों के लिए केस-असंवेदनशील खोज की तलाश में हैं:

import string

s = 'This is my text example'
if 'is' not in (word.lower() 
    for split_char in string.punctuation + string.whitespace 
    for word in s.split(split_char)):
    # do something




python string unicode text