<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 問題 一些無聊的幼稚黑客在你的網站頁面表單中輸入文本”pyt???”,然后你想將這些字符清理掉。 ## 解決方案 文本清理問題會涉及到包括文本解析與數據處理等一系列問題。在非常簡單的情形下,你可能會選擇使用字符串函數(比如 `str.upper()` 和 `str.lower()` )將文本轉為標準格式。使用 `str.replace()` 或者 `re.sub()` 的簡單替換操作能刪除或者改變指定的字符序列。你同樣還可以使用2.9小節的 `unicodedata.normalize()` 函數將unicode文本標準化。 然后,有時候你可能還想在清理操作上更進一步。比如,你可能想消除整個區間上的字符或者去除變音符。為了這樣做,你可以使用經常會被忽視的 `str.translate()` 方法。為了演示,假設你現在有下面這個凌亂的字符串: >>> s = 'pyt???\fis\tawesome\r\n' >>> s 'pyt???\x0cis\tawesome\r\n' >>> 第一步是清理空白字符。為了這樣做,先創建一個小的轉換表格然后使用 `translate()` 方法: >>> remap = { ... ord('\t') : ' ', ... ord('\f') : ' ', ... ord('\r') : None # Deleted ... } >>> a = s.translate(remap) >>> a 'pyt??? is awesome\n' >>> 正如你看的那樣,空白字符t和f已經被重新映射到一個空格。回車字符r直接被刪除。 你可以以這個表格為基礎進一步構建更大的表格。比如,讓我們刪除所有的和音符: >>> import unicodedata >>> import sys >>> cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) ... if unicodedata.combining(chr(c))) ... >>> b = unicodedata.normalize('NFD', a) >>> b 'pyt??? is awesome\n' >>> b.translate(cmb_chrs) 'python is awesome\n' >>> 上面例子中,通過使用 `dict.fromkeys()` 方法構造一個字典,每個Unicode和音符作為鍵,對于的值全部為None。 然后使用 `unicodedata.normalize()` 將原始輸入標準化為分解形式字符。然后再調用 `translate` 函數刪除所有重音符。同樣的技術也可以被用來刪除其他類型的字符(比如控制字符等)。 作為另一個例子,這里構造一個將所有Unicode數字字符映射到對應的ASCII字符上的表格: >>> digitmap = { c: ord('0') + unicodedata.digit(chr(c)) ... for c in range(sys.maxunicode) ... if unicodedata.category(chr(c)) == 'Nd' } ... >>> len(digitmap) 460 >>> # Arabic digits >>> x = '\u0661\u0662\u0663' >>> x.translate(digitmap) '123' >>> 另一種清理文本的技術設計到I/O解碼與編碼函數。這里的思路是先對文本做一些初步的清理,然后再結合 `encode()` 或者 `decode()` 操作來清除或修改它。比如: >>> a 'pyt??? is awesome\n' >>> b = unicodedata.normalize('NFD', a) >>> b.encode('ascii', 'ignore').decode('ascii') 'python is awesome\n' >>> 這里的標準化操作將原來的文本分解為單獨的和音符。接下來的ASCII編碼/解碼只是簡單的一下子丟棄掉那些字符。當然,這種方法僅僅只在最后的目標就是獲取到文本對應ACSII表示的時候生效。 ## 討論 文本字符清理一個最主要的問題應該是運行的性能。一般來講,代碼越簡單運行越快。對于簡單的替換操作,`str.replace()` 方法通常是最快的,甚至在你需要多次調用的時候。比如,為了清理空白字符,你可以這樣做: def clean_spaces(s): s = s.replace('\r', '') s = s.replace('\t', ' ') s = s.replace('\f', ' ') return s 如果你去測試的話,你就會發現這種方式會比使用 `translate()` 或者正則表達式要快很多。 另一方面,如果你需要執行任何復雜字符對字符的重新映射或者刪除操作的話,`tanslate()` 方法會非常的快。 從大的方面來講,對于你的應用程序來說性能是你不得不去自己研究的東西。不幸的是,我們不可能給你建議一個特定的技術,使它能夠適應所有的情況。因此實際情況中需要你自己去嘗試不同的方法并評估它。 盡管這一節集中討論的是文本,但是類似的技術也可以適用于字節,包括簡單的替換,轉換和正則表達式。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看