Ответ 1
io.open
является заменой для ваших нужд, поэтому пример кода, который вы предоставили, будет выглядеть следующим образом в Python 2.x:
import io
def readGridFromPath(self, filepath):
try:
self.readGridFromFile(io.open(filepath, 'r', encoding='utf-8'))
except UnicodeDecodeError:
self.readGridFromFile(io.open(filepath, 'r', encoding='utf-16'))
io.open
подробно описывается здесь. Его прототип:
Сам модульio.open(file, mode = 'r', buffering = -1, encoding = None, errors = None, newline = None, closefd = True)
io
был разработан как уровень совместимости между Python 2.x и Python 3.x, чтобы облегчить переход к Py3k и упростить обратный перенос и обслуживание существующего кода Python 2.x.
Также обратите внимание, что может быть оговорка с использованием codecs.open
, поскольку работает в двоичном режиме только:
Примечание. Файлы всегда открываются в двоичном режиме, даже если не указан бинарный режим. Это делается для предотвращения потери данных из-за кодирования с использованием 8-битных значений. Это означает, что автоматическое преобразование "\n'` не выполняется при чтении и записи.
Также вы можете столкнуться с проблемами ручного обнаружения и удаления спецификации UTF8 - codecs.open
оставляет спецификацию UTF8 inline как символ u'\ufeff'
.