[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.\ 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.파이썬의 unicodedata 라이브러리에는 많은 유용한 것들이 있습니다. 그 중 하나는 .normalize () 함수입니다.
파이썬의 unicodedata 라이브러리에는 많은 유용한 것들이 있습니다. 그 중 하나는 .normalize () 함수입니다.
시험:
new_str = unicodedata.normalize("NFKD", unicode_str)
위의 결과를 얻지 못한다면 NFKD를 위의 링크에 나열된 다른 방법으로 대체하십시오.
-
==============================
3.파이썬으로 sqlite3 데이터베이스에서 데이터를 가져 오는 것과 같은 문제가 발생했습니다. 위의 대답은 나를 위해 작동하지 않았다. (왜 그런지는 모르겠다.)하지만 이렇게했다 : line = line.decode ( 'ascii', 'ignore') 그러나 나의 목표는 \ xa0s를 공백으로 대체하는 것이 아니라 삭제하는 것이었다.
파이썬으로 sqlite3 데이터베이스에서 데이터를 가져 오는 것과 같은 문제가 발생했습니다. 위의 대답은 나를 위해 작동하지 않았다. (왜 그런지는 모르겠다.)하지만 이렇게했다 : line = line.decode ( 'ascii', 'ignore') 그러나 나의 목표는 \ xa0s를 공백으로 대체하는 것이 아니라 삭제하는 것이었다.
Ned Batchelder가 작성한이 유용한 도움이되는 유니 코드 튜토리얼에서 얻은 것입니다.
-
==============================
4.이 시도:
이 시도:
string.replace('\\xa0', ' ')
-
==============================
5.줄 끝에서 .strip ()을 사용해보십시오. line.strip () 잘 작동했습니다.
줄 끝에서 .strip ()을 사용해보십시오. line.strip () 잘 작동했습니다.
-
==============================
6.나는 인쇄 할 수없는 성격의 문제에 대해 인터넷 검색을하는 동안 여기서 끝납니다. 나는 MySQL UTF8 general_ci를 사용하고 폴란드어를 다룹니다. 문제가있는 문자열의 경우 다음과 같이 진행해야합니다.
나는 인쇄 할 수없는 성격의 문제에 대해 인터넷 검색을하는 동안 여기서 끝납니다. 나는 MySQL UTF8 general_ci를 사용하고 폴란드어를 다룹니다. 문제가있는 문자열의 경우 다음과 같이 진행해야합니다.
text=text.replace('\xc2\xa0', ' ')
그냥 빠른 해결 방법이며 올바른 인코딩 설정으로 무언가를 시도해야합니다.
-
==============================
7.이 코드를 사용해보십시오.
이 코드를 사용해보십시오.
import re re.sub(r'[^\x00-\x7F]+','','paste your string here').decode('utf-8','ignore').strip()
-
==============================
8.0xA0 (유니 코드)는 UTF-8에서 0xC2A0입니다. .encode ( 'utf8')는 유니 코드 0xA0을 가져오고 UTF-8의 0xC2A0으로 바꿉니다. 그러므로 0xC2s의 유령 ... 인코딩이 대체되지 않습니다. 아마도 지금 깨달았을 것입니다.
0xA0 (유니 코드)는 UTF-8에서 0xC2A0입니다. .encode ( 'utf8')는 유니 코드 0xA0을 가져오고 UTF-8의 0xC2A0으로 바꿉니다. 그러므로 0xC2s의 유령 ... 인코딩이 대체되지 않습니다. 아마도 지금 깨달았을 것입니다.
-
==============================
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.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.일반 표현식을 사용하는 일반 버전 (모든 제어 문자를 제거합니다) :
일반 표현식을 사용하는 일반 버전 (모든 제어 문자를 제거합니다) :
import re def remove_control_chart(s): return re.sub(r'\\x..', '', s)
from https://stackoverflow.com/questions/10993612/python-removing-xa0-from-string by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Django : 이미지 URL에서 ImageField에 이미지 추가 (0) | 2018.10.06 |
---|---|
[PYTHON] 목록에서 항목의 위치를 얻는 방법? (0) | 2018.10.06 |
[PYTHON] Python 실행 파일 libpython 공유 라이브러리를 찾을 수 없습니다. (0) | 2018.10.06 |
[PYTHON] 파이썬에서 HTTP PUT을 수행 할 수있는 방법이 있습니까? (0) | 2018.10.06 |
[PYTHON] 설치 스크립트가 오류와 함께 종료되었습니다 : 'x86_64-linux-gnu-gcc'명령이 종료 상태 1로 실패했습니다 (0) | 2018.10.06 |