파이썬 특수문자 replace로 지우기

조회수 337회

안녕하세요. 질문드립니다.

크롤링 후 엑셀로 저장 시 특수문자 "₩" 가 있을 경우 euc-kr 인코딩할때 오류가 나서 엑셀로 저장이 안되고있습니다.

현재 코드에서 문제있는 부분은

상품의 옵션을 체크하는 부분 중 옵션에 예를 들어 "+3,000₩" 이라는 값이 있을경우 ₩를 공백으로 치환하고싶은데 replace로 지워지지 않습니다..

...

    생략...
    option_chk2 = option_chk.select('a[rel]')
    print(option_chk2)  
    # print결과 : 
    #<a class="sbFocus" href="#" rel="">- 옵션 선택 -</a>, <a href="#중형" rel="중형">중형</a>, <a             href="#대형" rel="대형">대형(+3,000₩)</a>

    a = ' + '.join([i.string for i in option_chk2])
    b = a.replace('₩₩','')

    if not a:
            a = '품절'
    print(a)
    #print결과
    #'- 옵션 선택 - + 중형 + 대형(+3,000₩)'
    print(b)
    #'- 옵션 선택 - + 중형 + 대형(+3,000₩)'

위 상황입니다.

파이썬에서는 역슬래쉬 "₩"를 특수문자로 인식하려면 ₩₩ 두번쓰라고 검색하여 찾았는데 적용이 안되네요..

아래 테스트로는 잘됩니다.

    import re

    char="₩₩"
    string = ("3,000"+char)
    print(string)
    #결과 3,000₩

    string2 = string.replace("₩₩","")
    print(string2)
    #결과 3,000

역슬래쉬가 해시코드 질문창에서는 \ 로 표기되서 제가 임의로 특수문자 ₩로 변환했습니다.

비슷한 문제가 있었던분 지식 좀 나눠주세요..

감사합니다.

  • \를 찾아서 치환해야 하는데 ₩를 찾아서 치환하려고 하고 있네요. 그러니까 안 되는 것이지요. \를 찾아서 ₩로 치환해 주세요. 그건 euc-kr 인코딩에 문제를 일으키지 않을 겁니다. 엽토군 2022.10.7 20:45
  • \를 파이썬 기본 IDLE 편집기에서 쓰면 ₩로 보여요.. 그리고 찾아오는 값도 ₩ 이거라서 실제로 키보드의 역슬레쉬를 두번써서 했는데 안됩니다..ㅠㅠ 근데 아래 예제에서는 잘 빠져요... 이상합니다.. 유니코드로 표기하면 u20a9 로 역슬래쉬가 맞습니다 JJo 2022.10.8 00:44

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    엄...

    역슬래시문자와 원화문자가 다르기 때문에 문제가 발생하는 것 아닌가요?

    >>> s = '\u20a9'
    >>> s
    '₩'
    >>> print(s)
    ₩
    >>> s.encode("cp949")
    Traceback (most recent call last):
      File "<pyshell#3>", line 1, in <module>
        s.encode("cp949")
    UnicodeEncodeError: 'cp949' codec can't encode character '\u20a9' in position 0: illegal multibyte sequence
    >>> s2 = '\\'
    >>> s2
    '\\'
    >>> print(s2)
    \
    >>> ord(s2)
    92
    >>> ord(s)
    8361
    >>> hex(ord(s2))
    '0x5c'
    >>> hex(ord(s))
    '0x20a9'
    >>> s2.encode("cp949")
    b'\\'
    
    
    >>> import re
    >>> 
    >>> s1 = "3000 \u20a9"
    >>> s2 = "3000 \u005c"
    >>> s1
    '3000 ₩'
    >>> s2
    '3000 \\'
    >>> print(s1, s2)
    3000 ₩ 3000 \
    >>> 
    >>> _s1 = s1.replace("₩", "")
    >>> _s1
    '3000 '
    >>> __s1 = s1.replace("\\", "")
    >>> __s1
    '3000 ₩'
    >>> 
    >>> _s2 = s2.replace("₩", "")
    >>> _s2
    '3000 \\'
    >>> __s2 = s2.replace("\\", "")
    >>> __s2
    '3000 '
    
    • b = a.replace("0₩","0원") 앞에 0을 붙여서 했더니 됐습니다.... 아예 유니코드로 변환해서 하는방법도 있군요!! 감사합니다!!! JJo 2022.10.8 12:50

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)