[PYTHON] 파이썬 2로 파이썬 3 오픈 (인코딩 = "utf-8") 백 포트
PYTHON파이썬 2로 파이썬 3 오픈 (인코딩 = "utf-8") 백 포트
Python 3 스타일 open ()을 인코딩 매개 변수와 함께 사용하는 Python 3 용으로 작성된 Python 코드베이스가 있습니다.
https://github.com/miohtama/vvv/blob/master/vvv/textlineplugin.py#L47
with open(fname, "rt", encoding="utf-8") as f:
이제이 코드를 Python 2.x로 백 포트하고 싶습니다. 그래서 Python 2와 Python 3에서 작동하는 코드베이스를 갖게 될 것입니다.
open ()의 차이점과 인코딩 매개 변수 부족 문제를 해결하기위한 권장 전략은 무엇입니까?
bytestrings을 스트림하는 Python 3 open () 스타일 파일 핸들러를 사용할 수 있습니까? 그러면 Python 2 open ()처럼 작동합니까?
해결법
-
==============================
1.Python 2.6과 2.7 만 지원하면 open 대신 io.open을 사용할 수 있습니다. io는 파이썬 3을위한 새로운 io 서브 시스템이며 파이썬 2,6과 2.7에도 존재합니다. Python 2.6 (및 3.0)에서는 순수하게 Python으로 구현되었으며 속도가 매우 느리기 때문에 파일을 읽을 때 속도가 필요한 경우 좋은 옵션이 아닙니다.
Python 2.6과 2.7 만 지원하면 open 대신 io.open을 사용할 수 있습니다. io는 파이썬 3을위한 새로운 io 서브 시스템이며 파이썬 2,6과 2.7에도 존재합니다. Python 2.6 (및 3.0)에서는 순수하게 Python으로 구현되었으며 속도가 매우 느리기 때문에 파일을 읽을 때 속도가 필요한 경우 좋은 옵션이 아닙니다.
속도가 필요하거나 Python 2.5 또는 이전 버전을 지원해야하는 경우 대신 codecs.open을 사용할 수 있습니다. 그것은 또한 인코딩 파라미터를 가지며, 라인 엔딩을 다르게 처리한다는 점을 제외하면 io.open과 매우 유사합니다.
open(filename, 'rb')
'b'는 '바이트'를 의미합니다.
-
==============================
2.나는 생각한다.
나는 생각한다.
from io import open
해야 할 것.
-
==============================
3.한 가지 방법이 있습니다.
한 가지 방법이 있습니다.
with open("filename.txt", "rb") as f: contents = f.read().decode("UTF-8")
-
==============================
4.이것은 트릭을 할 수 있습니다 :
이것은 트릭을 할 수 있습니다 :
import sys if sys.version_info[0] > 2: # py3k pass else: # py2 import codecs import warnings def open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None): if newline is not None: warnings.warn('newline is not supported in py2') if not closefd: warnings.warn('closefd is not supported in py2') if opener is not None: warnings.warn('opener is not supported in py2') return codecs.open(filename=file, mode=mode, encoding=encoding, errors=errors, buffering=buffering)
그렇다면 python3 방식으로 코드를 유지할 수 있습니다.
newline, closefd, opener와 같은 일부 API는 작동하지 않습니다.
from https://stackoverflow.com/questions/10971033/backporting-python-3-openencoding-utf-8-to-python-2 by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Flask 요청의 다른 부분을 어떻게 얻습니까? (0) | 2018.10.07 |
---|---|
[PYTHON] matplotlib의 날짜 틱 및 회전 (0) | 2018.10.07 |
[PYTHON] 파이썬에서 MATLAB 함수 호출하기 (0) | 2018.10.07 |
[PYTHON] Imshow : 범위 및 측면 (0) | 2018.10.07 |
[PYTHON] 동일한 random numberpy 배열을 일관되게 생성합니다. (0) | 2018.10.07 |