복붙노트

[PYTHON] 파이썬 : 문자열에서 \ xa0을 제거 하시겠습니까?

PYTHON

파이썬 : 문자열에서 \ xa0을 제거 하시겠습니까?

나는 현재 Beautiful Soup을 사용하여 HTML 파일을 구문 분석하고 get_text ()를 호출하지만 공간을 나타내는 \ xa0 유니 코드가 많이 남아있는 것처럼 보입니다. Python 2.7에서이 모든 것을 제거하고 공간으로 바꾸는 효율적인 방법이 있습니까? 더 일반적인 질문은 유니 코드 형식을 제거하는 방법이있을 것 같습니까?

나는 다른 스레드에서 제안한대로 : line = line.replace (u '\ xa0', '')를 사용하려했으나 \ xa0을 u로 변경 했으므로 이제는 "u"가 도처에 있습니다. ) :

편집 : 문제는 str.replace (u '\ xa0', '') .encode ( 'utf-8')로 해결할 수 있지만 replace ()없이 .encode ( 'utf-8') 예를 들어 \ xc2와 같이 더 이상한 문자가 나올 수도 있습니다. 아무도 이것을 설명 할 수 있습니까?

해결법

  1. ==============================

    1.\ xa0는 Latin1 (ISO 8859-1)에서 실제로 비 분리 영역이며, 또한 chr (160)입니다. 공백으로 바꿔야합니다.

    \ xa0는 Latin1 (ISO 8859-1)에서 실제로 비 분리 영역이며, 또한 chr (160)입니다. 공백으로 바꿔야합니다.

    string = string.replace (u '\ xa0', u '')

    .encode ( 'utf-8')을 사용하면 유니 코드를 utf-8로 인코딩하므로 모든 유니 코드를 1에서 4 바이트로 나타낼 수 있습니다. 이 경우 \ xa0은 2 바이트 \ xc2 \ xa0으로 표시됩니다.

    http://docs.python.org/howto/unicode.html에서 읽어보십시오.

  2. ==============================

    2.파이썬의 unicodedata 라이브러리에는 많은 유용한 것들이 있습니다. 그 중 하나는 .normalize () 함수입니다.

    파이썬의 unicodedata 라이브러리에는 많은 유용한 것들이 있습니다. 그 중 하나는 .normalize () 함수입니다.

    시험:

    new_str = unicodedata.normalize("NFKD", unicode_str)
    

    위의 결과를 얻지 못한다면 NFKD를 위의 링크에 나열된 다른 방법으로 대체하십시오.

  3. ==============================

    3.파이썬으로 sqlite3 데이터베이스에서 데이터를 가져 오는 것과 같은 문제가 발생했습니다. 위의 대답은 나를 위해 작동하지 않았다. (왜 그런지는 모르겠다.)하지만 이렇게했다 : line = line.decode ( 'ascii', 'ignore') 그러나 나의 목표는 \ xa0s를 공백으로 대체하는 것이 아니라 삭제하는 것이었다.

    파이썬으로 sqlite3 데이터베이스에서 데이터를 가져 오는 것과 같은 문제가 발생했습니다. 위의 대답은 나를 위해 작동하지 않았다. (왜 그런지는 모르겠다.)하지만 이렇게했다 : line = line.decode ( 'ascii', 'ignore') 그러나 나의 목표는 \ xa0s를 공백으로 대체하는 것이 아니라 삭제하는 것이었다.

    Ned Batchelder가 작성한이 유용한 도움이되는 유니 코드 튜토리얼에서 얻은 것입니다.

  4. ==============================

    4.이 시도:

    이 시도:

    string.replace('\\xa0', ' ')
    
  5. ==============================

    5.줄 끝에서 .strip ()을 사용해보십시오. line.strip () 잘 작동했습니다.

    줄 끝에서 .strip ()을 사용해보십시오. line.strip () 잘 작동했습니다.

  6. ==============================

    6.나는 인쇄 할 수없는 성격의 문제에 대해 인터넷 검색을하는 동안 여기서 끝납니다. 나는 MySQL UTF8 general_ci를 사용하고 폴란드어를 다룹니다. 문제가있는 문자열의 경우 다음과 같이 진행해야합니다.

    나는 인쇄 할 수없는 성격의 문제에 대해 인터넷 검색을하는 동안 여기서 끝납니다. 나는 MySQL UTF8 general_ci를 사용하고 폴란드어를 다룹니다. 문제가있는 문자열의 경우 다음과 같이 진행해야합니다.

    text=text.replace('\xc2\xa0', ' ')
    

    그냥 빠른 해결 방법이며 올바른 인코딩 설정으로 무언가를 시도해야합니다.

  7. ==============================

    7.이 코드를 사용해보십시오.

    이 코드를 사용해보십시오.

    import re
    re.sub(r'[^\x00-\x7F]+','','paste your string here').decode('utf-8','ignore').strip()
    
  8. ==============================

    8.0xA0 (유니 코드)는 UTF-8에서 0xC2A0입니다. .encode ( 'utf8')는 유니 코드 0xA0을 가져오고 UTF-8의 0xC2A0으로 바꿉니다. 그러므로 0xC2s의 유령 ... 인코딩이 대체되지 않습니다. 아마도 지금 깨달았을 것입니다.

    0xA0 (유니 코드)는 UTF-8에서 0xC2A0입니다. .encode ( 'utf8')는 유니 코드 0xA0을 가져오고 UTF-8의 0xC2A0으로 바꿉니다. 그러므로 0xC2s의 유령 ... 인코딩이 대체되지 않습니다. 아마도 지금 깨달았을 것입니다.

  9. ==============================

    9.몇 가지 방법을 시도한 후에, 그것을 요약하기 위해, 내가 한 방법입니다. 다음은 구문 분석 된 HTML 문자열에서 \ xa0 문자를 피하거나 제거하는 두 가지 방법입니다.

    몇 가지 방법을 시도한 후에, 그것을 요약하기 위해, 내가 한 방법입니다. 다음은 구문 분석 된 HTML 문자열에서 \ xa0 문자를 피하거나 제거하는 두 가지 방법입니다.

    다음과 같이 원시 html이 있다고 가정합니다.

    raw_html = '<p>Dear Parent, </p><p><span style="font-size: 1rem;">This is a test message, </span><span style="font-size: 1rem;">kindly ignore it. </span></p><p><span style="font-size: 1rem;">Thanks</span></p>'
    

    그래서이 HTML 문자열을 청소하려고합니다 :

    from bs4 import BeautifulSoup
    raw_html = '<p>Dear Parent, </p><p><span style="font-size: 1rem;">This is a test message, </span><span style="font-size: 1rem;">kindly ignore it. </span></p><p><span style="font-size: 1rem;">Thanks</span></p>'
    text_string = BeautifulSoup(raw_html, "lxml").text
    print text_string
    #u'Dear Parent,\xa0This is a test message,\xa0kindly ignore it.\xa0Thanks'
    

    위 코드는 문자열에 \ xa0라는 문자를 생성합니다. 제대로 제거하려면 두 가지 방법이 있습니다.

    방법 # 1 (권장) : 첫 번째 것은 BeautifulSoup의 get_text 메소드이며 strip 인수가 True 인 경우입니다. 그래서 우리의 코드는 다음과 같습니다.

    clean_text = BeautifulSoup(raw_html, "lxml").get_text(strip=True)
    print clean_text
    # Dear Parent,This is a test message,kindly ignore it.Thanks
    

    방법 # 2 : 다른 옵션은 파이썬의 라이브러리 unicodedata를 사용하는 것입니다.

    import unicodedata
    text_string = BeautifulSoup(raw_html, "lxml").text
    clean_text = unicodedata.normalize("NFKD",text_string)
    print clean_text
    # u'Dear Parent,This is a test message,kindly ignore it.Thanks'
    

    나는 또한 당신이 참조하고 싶을지도 모른다이 blog에이 방법을 상술했다.

  10. ==============================

    10.Beautiful Soup에서는 get_text ()에 strip 매개 변수를 전달할 수 있습니다.이 매개 변수는 텍스트의 시작과 끝에서 공백을 제거합니다. \ xa0 또는 문자열의 시작 또는 끝에있을 경우 다른 공백을 제거합니다. Beautiful Soup은 빈 문자열을 \ xa0로 바꾸었고 이로 인해 문제가 해결되었습니다.

    Beautiful Soup에서는 get_text ()에 strip 매개 변수를 전달할 수 있습니다.이 매개 변수는 텍스트의 시작과 끝에서 공백을 제거합니다. \ xa0 또는 문자열의 시작 또는 끝에있을 경우 다른 공백을 제거합니다. Beautiful Soup은 빈 문자열을 \ xa0로 바꾸었고 이로 인해 문제가 해결되었습니다.

    mytext = soup.get_text(strip=True)
    
  11. ==============================

    11.일반 표현식을 사용하는 일반 버전 (모든 제어 문자를 제거합니다) :

    일반 표현식을 사용하는 일반 버전 (모든 제어 문자를 제거합니다) :

    import re
    def remove_control_chart(s):
        return re.sub(r'\\x..', '', s)
    
  12. from https://stackoverflow.com/questions/10993612/python-removing-xa0-from-string by cc-by-sa and MIT license