Python 3 decode ("utf-8") добавляет новые строки там, где должны быть только пробелы. Я остановлю это? - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь прочитать некоторые данные с выхода другой программы. Я знаю, что могу открывать файлы и читать их, однако для целей этого вопроса я создал пример файла testdata.txt, который выглядит следующим образом:

cat testdata.txt 
my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::

В своем коде я пытаюсь использовать подпроцесс. check_output, чтобы сделать системный вызов и прочитать вывод в переменные. Однако, когда я делаю это без декодирования ("UTF-8") его в виде байтов. Поэтому, чтобы преобразовать его в строки, я использовал декодирование ("utf-8), однако затем он добавляет новые строки, где есть пробелы.

output = subprocess.check_output(('cat', 'testdata.txt'), shell=False).decode('utf-8')
pprint.pprint((output))

Когда я извиняюсь за этот код, я получаю эти новые строки.

('my.local\\Sho '
 'Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho '
 'Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho '
 'Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho '
 'Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n')

Я пытаюсь сделать код похожим на это:

('my.local\\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n')

1 Ответ

1 голос
/ 30 марта 2020

Это 'pprint' делает это. Взгляните на этот маленький тестовый код. И да, вы можете указать pprint, где обернуть, например, pprint(test, width=300).

Код:

from pprint import pprint
test=r"""my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::"""
print(test)
pprint(test)

Вывод:

my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
('my.local\\Sho '
 'Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho '
 'Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho '
 'Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
 'my.local\\Sho '
 'Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::')
...