Символы новой строки и StringIO - PullRequest
1 голос
/ 17 июня 2020

Я втягиваю данные с помощью urllib (Python 3), которые выглядят следующим образом:

b'\n  9 27  70.40 43.40  0.00  15.90   3218.5    \n  9 28  74.90 43.70  0.00  18.30   3236.8'

Преобразуя это в строку, получается так:

"\\n  9 27  70.40 43.40  0.00  15.90   3218.5    \\n  9 28  74.90 43.70  0.00  18.30   3236.8"   

Я хотел бы использовать numpy .genfromtxt для создания массива, но я не могу заставить io.StringIO анализировать символы новой строки. Когда я использую:

table = io.StringIO(match.group(1), newline=r"\\n")  # or newline=r"\n"

, я получаю сообщение об ошибке:

ValueError: illegal newline value: '\\\\n'

Я также пытался сохранить данные в собственном формате байтов и использовать io.BytesIO, но у меня есть та же проблема.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы используете неправильный метод преобразования байтов в строку. b'\n' должен преобразоваться в '\n' (при условии, что кодировка совместима с ASCII).

Правильный способ - с bytes.decode(), например:

>>> b'\n'.decode()
'\n'

Для получения дополнительной информации см. Преобразование байтов в строку , хотя он также охватывает Python 2, который имеет совершенно другой подход к двоичным данным.

2 голосов
/ 17 июня 2020

Попробуйте следующее:

np.genfromtxt(StringIO(b.decode() ))

Вероятно, проблема в том, как вы конвертируете байты в строку.

Результат:

array([[   9. ,   27. ,   70.4,   43.4,    0. ,   15.9, 3218.5],
       [   9. ,   28. ,   74.9,   43.7,    0. ,   18.3, 3236.8]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...