복붙노트

[PYTHON] 문자열에서 UTF 이외의 8 개 기호를 모두 삭제하십시오.

PYTHON

문자열에서 UTF 이외의 8 개 기호를 모두 삭제하십시오.

나는 많은 양의 파일과 파서를 가지고있다. 내가해야 할 일은 utf-8이 아닌 모든 기호를 제거하고 mongodb에 데이터를 저장하는 것입니다. 현재 나는 이와 같은 코드를 가지고있다.

with open(fname, "r") as fp:
    for line in fp:
        line = line.strip()
        line = line.decode('utf-8', 'ignore')
        line = line.encode('utf-8', 'ignore')

어떻게 든 나는 여전히 오류가 발생한다.

bson.errors.InvalidStringData: strings in documents must be valid UTF-8: 
1/b62010montecassianomcir\xe2\x86\x90ta0\xe2\x86\x90008923304320733/290066010401040101506055soccorin

나는 그것을 얻지 않는다. 그것을 할 수있는 간단한 방법이 있습니까?

UPD : Python과 Mongo가 Utf-8 Valid string의 정의에 동의하지 않는 것 같습니다.

해결법

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

    1.마지막 두 줄 대신 코드 줄 아래에서 시도하십시오. 희망이 도움이 :

    마지막 두 줄 대신 코드 줄 아래에서 시도하십시오. 희망이 도움이 :

    line=line.decode('utf-8','ignore').encode("utf-8")
    
  2. ==============================

    2.파이썬 3의 경우이 스레드의 주석에서 언급했듯이 다음을 수행 할 수 있습니다.

    파이썬 3의 경우이 스레드의 주석에서 언급했듯이 다음을 수행 할 수 있습니다.

    line = bytes(line, 'utf-8').decode('utf-8', 'ignore')
    

    '무시'매개 변수는 문자를 디코딩 할 수없는 경우 오류가 발생하지 않도록합니다.

    행이 이미 바이트 객체 (예 : b'my string ') 인 경우 디코드 ('utf-8 ','ignore ')로 디코딩하면됩니다.

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

    3.utf-8 문자를 처리하지 않는 예제

    utf-8 문자를 처리하지 않는 예제

    import string
    
    test=u"\n\n\n\n\n\n\n\n\n\n\n\n\n\nHi <<First Name>>\nthis is filler text \xa325 more filler.\nadditilnal filler.\n\nyet more\xa0still more\xa0filler.\n\n\xa0\n\n\n\n\nmore\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfiller.\x03\n\t\t\t\t\t\t    almost there \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nthe end\n\n\n\n\n\n\n\n\n\n\n\n\n"
    
    print ''.join(x for x in test if x in string.printable)
    
  4. ==============================

    4.

    with open(fname, "r") as fp:
    for line in fp:
        line = line.strip()
        line = line.decode('cp1252').encode('utf-8')
    
  5. from https://stackoverflow.com/questions/26541968/delete-every-non-utf-8-symbols-from-string by cc-by-sa and MIT license