[英]encoding strings in python
我正在嘗試對從Excel文檔中獲取的一段文本進行編碼。 它包含各種奇怪的字符,例如引號,反斜杠,括號等。將其轉換為Python兼容字符串以便我可以對其進行處理並將其寫入變量的正確方法是什么?
ExampleText = "MINIMUM TRACK FASTENING SHALL BE 0.145" DIAMETER POWDER ACTUATED FASTENERS (P.A.F.S) SPACED ON 8" CENTERS FOR BEARING WALLS, AND AT 12" O.C. FOR NON-LOAD BEARING WALLS (U.N.O.), WITH 1 1/2" MINIMUM PENETRATION INTO CONCRETE. AT X-BRACED SHEAR WALLS, TRACK SHALL BE ATTACHED PER DETAILS. At Infinity Shear Panels (ISP’S) attach to slab w/ 0.145" x 1 1/2” powder actuated fasteners spaced on 4” centers (HILTI DS 37 P10 or equal) -OR- (6) 3/8" DIA. 2205 expansion anchors w/ 2 1/2" min. embedment - OR-Simpson "Titen" screws @ 6" o.c."
我試過了: str(ExampleText)
但是顯然失敗了。
謝謝你的幫助!
PS。 這是我得到的錯誤:UnicodeEncodeError:('unknown','\\ x00',0,1,'')ps2。 我在IronPython2.7上,我知道一個無賴:-(
如果給定的代碼與您的代碼完全匹配,也就不足為奇了。 您用雙引號將其括起來,但是字符串包含雙引號。 照原樣,當解釋器看到下一個雙引號時,字符串將結束,然后會有一堆無法識別的術語(例如DIAMETER
和POWDER
),然后最終另一個字符串開始,依此類推。
您需要用反斜杠對字符串的雙引號進行轉義,或者在字符串的兩邊用三引號引起來。
ExampleText = "MINIMUM TRACK FASTENING SHALL BE 0.145\" DIAMETER POWDER ACTUATED FASTENERS (P.A.F.S) SPACED ON 8\" CENTERS FOR BEARING WALLS, AND AT 12\" O.C. FOR NON-LOAD BEARING WALLS (U.N.O.), WITH 1 1/2\" MINIMUM PENETRATION INTO CONCRETE. AT X-BRACED SHEAR WALLS, TRACK SHALL BE ATTACHED PER DETAILS. At Infinity Shear Panels (ISP’S) attach to slab w/ 0.145\" x 1 1/2\" powder actuated fasteners spaced on 4\" centers (HILTI DS 37 P10 or equal) -OR- (6) 3/8\" DIA. 2205 expansion anchors w/ 2 1/2\" min. embedment - OR-Simpson \"Titen\" screws @ 6\" o.c."
要么
ExampleText = """MINIMUM TRACK FASTENING SHALL BE 0.145" DIAMETER POWDER ACTUATED FASTENERS (P.A.F.S) SPACED ON 8" CENTERS FOR BEARING WALLS, AND AT 12" O.C. FOR NON-LOAD BEARING WALLS (U.N.O.), WITH 1 1/2" MINIMUM PENETRATION INTO CONCRETE. AT X-BRACED SHEAR WALLS, TRACK SHALL BE ATTACHED PER DETAILS. At Infinity Shear Panels (ISP’S) attach to slab w/ 0.145" x 1 1/2” powder actuated fasteners spaced on 4” centers (HILTI DS 37 P10 or equal) -OR- (6) 3/8" DIA. 2205 expansion anchors w/ 2 1/2" min. embedment - OR-Simpson "Titen" screws @ 6" o.c."""
SO的內置語法突出顯示表明您的樣本包含多個字符串,而我的則是一個連續的字符串。
另外,該字符串僅包含正斜杠,不包含反斜杠,因此那里沒有問題。 如果存在反斜杠,並且您想解決該問題,則可以在字符串前加上r
來表示原始字符串: r'hello\\nworld
打印為hello\\nworld
。 原始字符串無法處理的唯一事情是字符串中的最后一個字符為反斜杠。 通過在r'C:\\Users\\jsmith' + '\\\\'
添加以下代碼來解決該問題: r'C:\\Users\\jsmith' + '\\\\'
或r'C:\\Users\\jsmith' '\\\\'
(連接文字字符串時, +
並非必須)。
僅在將字符串寫入源代碼時才需要這樣做。 來自外部源(例如input()
或文件input()
字符串將自動處理。
您可以使用re
包中的escape()
函數:
>>> import re
>>> re.escape(ExampleText)
'\\"MINIMUM\\ TRACK\\ FASTENING\\ SHALL\\ BE\\ 0.145\\"\\ DIAMETER ...'
>>> ExampleText = ExampleText.decode('string_escape')
'"MINIMUM TRACK FASTENING SHALL BE 0.145" DIAMETER ...'
escape()
函數將使用其雙反斜杠等效項轉義所有非字母數字字符。 這應該可以很好地處理您的輸入字符串。
從我們在評論中的對話
# -*- coding: utf-8 -*-
ExampleText = '"MINIMUM TRACK FASTENING SHALL BE 0.145" DIAMETER POWDER ACTUATED FASTENERS (P.A.F.S) SPACED ON 8" CENTERS FOR BEARING WALLS, AND AT 12" O.C. FOR NON-LOAD BEARING WALLS (U.N.O.), WITH 1 1/2" MINIMUM PENETRATION INTO CONCRETE. AT X-BRACED SHEAR WALLS, TRACK SHALL BE ATTACHED PER DETAILS. At Infinity Shear Panels (ISP’S) attach to slab w/ 0.145" x 1 1/2” powder actuated fasteners spaced on 4” centers (HILTI DS 37 P10 or equal) -OR- (6) 3/8" DIA. 2205 expansion anchors w/ 2 1/2" min. embedment - OR-Simpson "Titen" screws @ 6" o.c."'
print(ExampleText)
編碼標題行是必需的,因為其中包含非ASCII字符。
您也可以用'''
或"""
將文字包裝起來:
x = '''some string'''
x = """some string"""
請注意,更好的解決方案可能是直接從數據中獲取字符串,而不是使用csv之類的包將其復制/粘貼到您的代碼中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.