[python] 파이썬 : 문자열에서 \ xa0 제거?

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

line = line.replace(u'\xa0',' ')다른 스레드에서 제안한대로 :을 사용해 보았지만 \ xa0을 u로 변경 했으므로 이제 대신 “u”가 있습니다. ) :

편집 : 문제는에 의해 해결 된 것처럼 보이지만 str.replace(u'\xa0', ' ').encode('utf-8')그냥하지 .encode('utf-8')않으면 replace()더 이상한 문자 (예 : \ xc2)를 뱉어내는 것처럼 보입니다. 누구든지 이것을 설명 할 수 있습니까?



답변

\ 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에서 읽으십시오 .

참고 사항 :이 답변은 2012 년부터 Python이 계속되었습니다. unicodedata.normalize지금 사용할 수 있습니다.


답변

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

시험:

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

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


답변

줄 끝에 .strip ()을 사용해보십시오
line.strip().


답변

여러 가지 방법을 시도한 후 요약하면 다음과 같습니다. 다음은 구문 분석 된 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 (권장) :
첫 번째 메소드는 스트립 인수가 True 인 BeautifulSoup의 get_text 메소드
이므로 코드는 다음과 같습니다.

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'

나는 당신이 참조하고 싶을지도 모르는 이 블로그에서 이러한 방법 자세히 설명했습니다 .


답변

이 시도:

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


답변

파이썬으로 sqlite3 데이터베이스에서 일부 데이터를 가져 오는 것과 동일한 문제가 발생했습니다. 위의 답변은 저에게 효과가 없었지만 (이유는 확실하지 않습니다), 그러나 그렇게했습니다 : line = line.decode('ascii', 'ignore')그러나 내 목표는 \ xa0s를 공백으로 바꾸지 않고 삭제하는 것이 었습니다.

나는 Ned Batchelder 의이 도움이되는 유니 코드 자습서 에서 이것을 얻었습니다 .


답변

인쇄 할 수없는 문자로 문제를 찾기 위해 인터넷을 사용하는 동안 여기에 있습니다. 나는 MySQL을 사용 UTF-8 general_ci하고 세련된 언어를 다룬다. 문제가있는 문자열의 경우 다음과 같이 처리해야합니다.

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

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