your programing

Python의 파일에서 문자 읽기

lovepro 2023. 8. 30. 23:26
반응형

Python의 파일에서 문자 읽기

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

하지만, 제가 그것을 문자열로 읽었을 때, 그것은 "저는 이렇게 합니다"가 됩니다.\u2018은 ""의 유니코드 표현인 것으로 알고 있습니다.사용합니다

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

명령을 실행합니다.

자, 문자열을 읽을 때 "나는 이렇게 하지 않아" 대신 "나는 이렇게 하지 않아"라는 식으로 문자열을 읽는 것이 가능할까요?

두 번째 편집:이 문제를 해결하기 위해 매핑을 사용하는 사람들을 본 적이 있지만, 실제로 이러한 종류의 ANSI를 유니코드로(또는 그 반대로) 변환하는 내장 변환은 없습니까?

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

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

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

업데이트 모드에서 파일을 열 수도 있어 읽기와 쓰기가 모두 가능합니다.

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

편집: 저는 당신의 목표가 단지 파이썬에서 파일을 문자열로 올바르게 읽을 수 있는 것이라고 생각합니다.유니코드에서 ASCII 문자열로 변환하려는 경우 유니코드 문자가 ASCII에 존재할 필요가 없기 때문에 직접 변환할 방법이 없습니다.

ASCII 문자열로 변환하려면 다음 중 하나를 시도합니다.

  1. 이 예제와 같은 몇 가지 특수한 경우에만 처리하려는 경우 특정 유니코드 문자를 ASCII 동등 문자로 대체합니다.

  2. 을 합니다.unicodedata모의normalize() 리고그고.string.encode()가능한 한 가장 가까운 ASCII 대응물로 변환하는 방법(참조 https://web.archive.org/web/20090228203858/http ://techxplorer.com/2006/07/18/converting-unicode-to-ascii-using-python) :

    >>> teststr
    u'I don\xe2\x80\x98t like this'
    >>> unicodedata.normalize('NFKD', teststr).encode('ascii', 'ignore')
    'I donat like this'
    

python 3 읽기 방법을 사용하여 인코딩된 텍스트 파일을 읽을 수도 있습니다.

f = open (file.txt, 'r', encoding='utf-8')
text = f.read()
f.close()

이 버전에서는 추가 라이브러리를 가져올 필요가 없습니다.

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

\u2018 문자는 파이썬에서 유니코드 문자열의 일부로만 나타날 수 있습니다. 예를 들어 다음과 같이 쓸 경우:

>>> 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

파의모행을유로읽면다으다사좋것습니이는용음하을일을 하는 것이 codecs.open단순한 기능이 아닌 기능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

하지만 정말로 "나는 이것을 좋아하지 않는다"가 아니라 "나는 이것을 좋아하지 않습니다"입니다.u'\u2018' 문자는 ""와 완전히 다른 문자입니다(그리고 시각적으로 ''와 더 일치해야 합니다).

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

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

유니코드에는 엄청나게 많은 구두점 문자가 있지만, 읽고 있는 문서를 만드는 응용 프로그램에서 실제로 사용되는 구두점 문자 중 일부만 사용할 수 있다고 생각합니다.

유니코드 이스케이프 문자가 포함된 비유니코드 문자열이 있을 수 있습니다. 예를 들어 다음과 같습니다.

>>> 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

텍스트 파일이 손상되었다는 사실은 차치하고(U+2018은 아포스트로피가 아닌 왼쪽 따옴표입니다): iconv를 사용하여 유니코드 문자를 ascii로 변환할 수 있습니다.

모듈이 더 이상 지원되지 않는 것 같고 표준 홈 페이지를 찾을 수 없기 때문에 "iconvcodec"을 검색해야 합니다.

>>> 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                                     '.

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

>>> test = u"I don\u2018t like this"
>>> test
u'I don\u2018t like this'
>>> print test
I don‘t like this

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

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

추가로, 당신은 그 파일을 작성하기 위해 무엇을 사용하고 있습니까?f1.read()다음과 같은 문자열을 반환해야 합니다.

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

이 문자열을 반환하는 경우 파일이 잘못 작성되고 있습니다.

'I don\u2018t like this'

(syslog="syslog") 옵션은 잘 모르겠지만 유니코드 문자가 이상한 파일에 사용할 수 있는 것 같습니다.

with open(fName, "rb") as fData:
    lines = fData.read().splitlines()
    lines = [line.decode("utf-8", errors="ignore") for line in lines]

언급URL : https://stackoverflow.com/questions/147741/character-reading-from-file-in-python

반응형