दिलचस्प पोस्ट
बाश में संख्याओं की तुलना करना जेपीईजी छवि का रंग सिर्फ ImageIO.read () और ImageIO.write () के बाद तेजी से परिवर्तित हो जाता है `Constexpr` और` const` के बीच का अंतर प्रयोगकर्ता के रूप में आईडी कैसे लेते हैं, जब हैश का उपयोग किया जाता है? वसंत सुरक्षा लॉगिन पृष्ठ के साथ एक अतिरिक्त पैरामीटर कैसे पास करें जावास्क्रिप्ट में URL से JSON कैसे प्राप्त करें? WebSockets और अपाचे प्रॉक्सी: mod_proxy_wstunnel को कॉन्फ़िगर कैसे करें? WAMP स्थानीय नेटवर्क पर नहीं पहुंच सकता है 403 Forbidden एचटीएमएल 5 वीडियो टैग के साथ स्थानीय (हार्ड ड्राइव) वीडियो फाइल खेलें? सी ++ अपवादों को किस तरीके से कोड में धीमा कर दिया जाता है जब कोई अपवाद नहीं डाला जाता है? MySQL में दिन के बराबर या उससे अधिक समय आकार-सीमित कतार जो जावा में अंतिम एन तत्व रखता है जावा वेब अनुप्रयोग को अंतर्राष्ट्रीयकरण कैसे करें? एक इकाई संबंध मॉडल और एक संबंधपरक मॉडल के बीच अंतर क्या है? एनएसडीटा को बेस 64 में परिवर्तित करना

एक ही स्थान से गैर- ASCII वर्ण बदलें

मुझे सभी गैर-एएससीआईआई (\ x00- \ x7F) अक्षरों को स्थान के साथ बदलने की जरूरत है मुझे आश्चर्य है कि यह मृत नहीं है-पायथन में आसान, जब तक कि मुझे कुछ याद आ रहा है निम्नलिखित फ़ंक्शन केवल सभी गैर- ASCII वर्णों को निकाल देता है:

def remove_non_ascii_1(text): return ''.join(i for i in text if ord(i)<128) 

और यह एक गैर-एएससीआईआई वर्णों को रिक्त स्थान की मात्रा के साथ वर्ण कोड बिंदु में बाइट्स की मात्रा के अनुसार बदलता है (अर्थात 3 स्थान के साथ वर्ण बदल जाता है):

 def remove_non_ascii_2(text): return re.sub(r'[^\x00-\x7F]',' ', text) 

मैं सभी गैर- ASCII वर्णों को एक स्थान के साथ कैसे बदल सकता हूँ?

समान SO प्रश्नों की असंख्य , स्ट्रिपिंग के विरोध में कोई भी पता वर्ण प्रतिस्थापन नहीं है , और साथ ही सभी गैर-एस्की वर्णों को किसी विशेष चरित्र से नहीं संबोधित करते हैं।

Solutions Collecting From Web of "एक ही स्थान से गैर- ASCII वर्ण बदलें"

आपका ''.join() अभिव्यक्ति फ़िल्टरिंग है , गैर-एएससीआईआई को हटा रहा है; आप इसके बजाय एक सशर्त अभिव्यक्ति का उपयोग कर सकते हैं:

 return ''.join([i if ord(i) < 128 else ' ' for i in text]) 

यह एक के बाद एक अक्षर को संभालता है और फिर भी एक प्रति स्थान प्रति चरित्र का उपयोग करेगा।

आपकी नियमित अभिव्यक्ति को स्थान के साथ लगातार गैर- ASCII वर्णों को प्रतिस्थापित करना चाहिए:

 re.sub(r'[^\x00-\x7F]+',' ', text) 

नोट करें + वहां

आपके लिए आपको अपने मूल स्ट्रिंग का सबसे समान प्रतिनिधित्व मिलता है जो मैं सुझाता हूं:

 from unidecode import unidecode def remove_non_ascii(text): return unidecode(unicode(text, encoding = "utf-8")) 

तो आप इसे एक स्ट्रिंग में उपयोग कर सकते हैं:

 remove_non_ascii("Ceñía") Cenia 

चरित्र प्रसंस्करण के लिए, यूनिकोड स्ट्रिंग का उपयोग करें:

 PythonWin 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32. >>> s='ABC马克def' >>> import re >>> re.sub(r'[^\x00-\x7f]',r' ',s) # Each char is a Unicode codepoint. 'ABC def' >>> b = s.encode('utf8') >>> re.sub(rb'[^\x00-\x7f]',rb' ',b) # Each char is a 3-byte UTF-8 sequence. b'ABC def' 

लेकिन ध्यान दें कि आपके स्ट्रिंग में डीकोड किए गए यूनिकोड वर्ण (अलग अक्षर और एक्सेन्ट अंक जोड़कर, उदाहरण के लिए) यदि आपके स्ट्रिंग में अभी भी एक समस्या है:

 >>> s = 'mañana' >>> len(s) 6 >>> import unicodedata as ud >>> n=ud.normalize('NFD',s) >>> n 'mañana' >>> len(n) 7 >>> re.sub(r'[^\x00-\x7f]',r' ',s) # single codepoint 'ma ana' >>> re.sub(r'[^\x00-\x7f]',r' ',n) # only combining mark replaced 'man ana' 

और इसका क्या?

 def replace_trash(unicode_string): for i in range(0, len(unicode_string)): try: unicode_string[i].encode("ascii") except: #means it's non-ASCII unicode_string=unicode_string[i].replace(" ") #replacing it with a single space return unicode_string 

यदि प्रतिस्थापन चरित्र '?' हो सकता है एक जगह की जगह, फिर मुझे लगता है कि result = text.encode('ascii', 'replace').decode() :

 """Test the performance of different non-ASCII replacement methods.""" import re from timeit import timeit # 10_000 is typical in the project that I'm working on and most of the text # is going to be non-ASCII. text = 'Æ' * 10_000 print(timeit( """ result = ''.join([c if ord(c) < 128 else '?' for c in text]) """, number=1000, globals=globals(), )) print(timeit( """ result = text.encode('ascii', 'replace').decode() """, number=1000, globals=globals(), )) 

परिणाम:

 0.7208260721400134 0.009975979187503592