Piping пароль для Kinit на сервере Windows

Вы смешиваете стороны кодирования и декодирования.

Для декодирования у вас все в порядке. Вы открываете его как двоичные данные, chardet первый 1K, затем снова открываете в текстовом режиме с использованием обнаруженной кодировки.

Но затем вы пытаетесь продолжить декодирование уже декодированных данных как ASCII, используя codecs.getreader . Эта функция возвращает StreamReader , который декодирует данные из потока. Это не сработает. Вам необходимо закодировать эти данные в ASCII.

Но непонятно, почему вы используете декодер потока codecs или в первом место, когда все, что вы хотите сделать, это кодировать один кусок текста за один раз, чтобы вы могли его зарегистрировать. Почему бы просто не вызвать метод encode?

log(csv_file.read().encode('ascii', 'ignore'))

Если вы хотите что-то, что вы можете использовать в качестве ленивого итерации строк, вы могли бы построить что-то полностью общее, но гораздо проще просто сделать что-то вроде примера UTF8Recorder в документах csv :

class AsciiRecoder:
    def __init__(self, f, encoding):
        self.reader = codecs.getreader(encoding)(f)    
    def __iter__(self):
        return self
    def next(self):
        return self.reader.next().encode("ascii", "ignore")

Или еще проще:

with io.open(self.csv_path, 'r', encoding=detectedEncoding) as csv_file:
    csv_ascii_stream = (line.encode('ascii', 'ignore') for line in csv_file)

0
задан Rasmus Rimestad 4 March 2019 в 17:12
поделиться