복붙노트

[PYTHON] 파이썬에서 파일로부터 문자 읽기

PYTHON

파이썬에서 파일로부터 문자 읽기

텍스트 파일에는 "나는 이것을 좋아하지 않는다"라는 문자열이 있습니다.

그러나 문자열로 읽으면 "I don \ xe2 \ x80 \ x98t this"와 같이됩니다. \ u2018이 " '"의 유니 코드 표현임을 이해합니다. 나는 사용한다

f1 = open (file1, "r")
text = f1.read()

명령을 읽으십시오.

자, 문자열로 읽을 때 문자열을 읽을 수 있습니까? "나는 이런 식으로하지 않습니다."대신 "나는 이것을 좋아하지 않습니다."대신 "나는 이런 식으로하지 않습니다."와 같은 식으로 문자열을 읽을 수 있습니까?

두 번째 편집 : 일부 사람들이이 문제를 해결하기 위해 매핑을 사용하는 것을 보았습니다.하지만 실제로이 종류의 ANSI를 유니 코드 (및 그 반대로) 변환하는 기본 제공 변환은 없습니까?

해결법

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

    1.참고 : http://docs.python.org/howto/unicode

    참고 : http://docs.python.org/howto/unicode

    따라서 파일에서 유니 코드를 읽는 것은 간단합니다.

    import codecs
    f = codecs.open('unicode.rst', encoding='utf-8')
    for line in f:
        print repr(line)
    

    읽기 모드와 쓰기 모드를 모두 허용하는 업데이트 모드에서 파일을 열 수도 있습니다.

    f = codecs.open('test', encoding='utf-8', mode='w+')
    f.write(u'\u4500 blah blah blah\n')
    f.seek(0)
    print repr(f.readline()[:1])
    f.close()
    

    편집 : 나는 당신의 의도 된 목표는 단지 ​​파이썬의 문자열로 파일을 제대로 읽을 수 있다고 가정합니다. 유니 코드에서 ASCII 문자열로 변환하려고하면 유니 코드 문자가 반드시 ASCII로 존재하지 않을 것이므로 직접적인 방법은 없습니다.

    ASCII 문자열로 변환하려는 경우 다음 중 하나를 시도하십시오.

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

    2.고려해야 할 점이 몇 가지 있습니다.

    고려해야 할 점이 몇 가지 있습니다.

    \ 문자는 파이썬에서 유니 코드 문자열 표현의 단편으로 만 나타날 수 있습니다. 당신이 쓰는 경우 :

    >>> text = u'‘'
    >>> print repr(text)
    u'\u2018'
    

    이제 유니 코드 문자열을 유쾌하게 인쇄하고 싶다면 유니 코드의 encode 메서드를 사용하면됩니다.

    >>> text = u'I don\u2018t like this'
    >>> print text.encode('utf-8')
    I don‘t like this
    

    모든 파일의 모든 행을 유니 코드로 읽으려면 파일 열기를 지정하는 대신 open 대신 codecs.open 함수를 사용하는 것이 좋습니다.

    >>> import codecs
    >>> f1 = codecs.open(file1, "r", "utf-8")
    >>> text = f1.read()
    >>> print type(text)
    <type 'unicode'>
    >>> print text.encode('utf-8')
    I don‘t like this
    
  3. ==============================

    3.그러나 정말로 "나는 이걸 좋아하지 않는다"는 것이지 "나는이 것을 좋아하지 않는다"는 것이 아니다. u '\ u2018'문자는 " '"와 완전히 다른 문자입니다 (시각적으로는' ''에 더 많이 대응해야합니다).

    그러나 정말로 "나는 이걸 좋아하지 않는다"는 것이지 "나는이 것을 좋아하지 않는다"는 것이 아니다. u '\ u2018'문자는 " '"와 완전히 다른 문자입니다 (시각적으로는' ''에 더 많이 대응해야합니다).

    인코딩 된 유니 코드를 일반 ASCII로 변환하려는 경우 ASCII로 변환하려는 유니 코드 구두점 매핑을 유지할 수 있습니다.

    punctuation = {
      u'\u2018': "'",
      u'\u2019': "'",
    }
    for src, dest in punctuation.iteritems():
      text = text.replace(src, dest)
    

    그러나 유니 코드에는 구두점 문자가 많이 있습니다. 그러나 실제로 읽고있는 문서를 작성하는 응용 프로그램이 실제로 사용하는 글꼴 중 일부만 사용할 수 있습니다.

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

    4.텍스트 파일이 깨졌습니다 (U + 2018은 아포스트로피가 아닌 왼쪽 따옴표입니다). iconv는 유니 코드 문자를 ascii로 음역으로 변환하는 데 사용할 수 있습니다.

    텍스트 파일이 깨졌습니다 (U + 2018은 아포스트로피가 아닌 왼쪽 따옴표입니다). iconv는 유니 코드 문자를 ascii로 음역으로 변환하는 데 사용할 수 있습니다.

    모듈이 더 이상 지원되지 않는 것 같아서 표준 홈 페이지를 찾을 수 없기 때문에 "iconvcodec"에 대해 google을 사용해야합니다.

    >>> import iconvcodec
    >>> from locale import setlocale, LC_ALL
    >>> setlocale(LC_ALL, '')
    >>> u'\u2018'.encode('ascii//translit')
    "'"
    

    또는 iconv 명령 줄 유틸리티를 사용하여 파일을 정리할 수 있습니다.

    $ xxd foo
    0000000: e280 980a                                ....
    $ iconv -t 'ascii//translit' foo | xxd
    0000000: 270a                                     '.
    
  5. ==============================

    5.어떻게 든 유니 코드 이스케이프 문자가 포함 된 비 유니 코드 문자열이있을 가능성이 있습니다 (예 :

    어떻게 든 유니 코드 이스케이프 문자가 포함 된 비 유니 코드 문자열이있을 가능성이 있습니다 (예 :

    >>> print repr(text)
    'I don\\u2018t like this'
    

    한 번 전에 실제로 이런 일이 일어났습니다. unicode_escape 코덱을 사용하여 문자열을 유니 코드로 디코딩 한 다음 원하는 형식으로 인코딩 할 수 있습니다.

    >>> uni = text.decode('unicode_escape')
    >>> print type(uni)
    <type 'unicode'>
    >>> print uni.encode('utf-8')
    I don‘t like this
    
  6. ==============================

    6.사실, U + 2018은 특수 문자 '유니 코드 표현입니다.' 원하는 경우이 코드를 사용하여 해당 문자의 인스턴스를 U + 0027로 변환 할 수 있습니다.

    사실, U + 2018은 특수 문자 '유니 코드 표현입니다.' 원하는 경우이 코드를 사용하여 해당 문자의 인스턴스를 U + 0027로 변환 할 수 있습니다.

    text = text.replace (u"\u2018", "'")
    

    또한 파일을 쓸 때 무엇을 사용하고 있습니까? f1.read ()는 다음과 같은 문자열을 반환합니다.

    'I don\xe2\x80\x98t like this'
    

    이 문자열을 반환하는 경우 파일이 잘못 쓰여지고 있습니다.

    'I don\u2018t like this'
    
  7. ==============================

    7.이것은 Pythons 방식으로 인코딩 된 문자열을 유니 코드로 보여줍니다. 하지만 난 당신이 화면에 문자열을 인쇄하거나 아무런 문제없이 새 파일에 쓸 수 있어야한다고 생각합니다.

    이것은 Pythons 방식으로 인코딩 된 문자열을 유니 코드로 보여줍니다. 하지만 난 당신이 화면에 문자열을 인쇄하거나 아무런 문제없이 새 파일에 쓸 수 있어야한다고 생각합니다.

    >>> test = u"I don\u2018t like this"
    >>> test
    u'I don\u2018t like this'
    >>> print test
    I don‘t like this
    
  8. from https://stackoverflow.com/questions/147741/character-reading-from-file-in-python by cc-by-sa and MIT license