Как я могу отформатировать следующий текст? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть этот текст:

[b'897', b'7W', b'7W', b'018', b'0998', b'0000']
[b'897', b'7W', b'7W', b'018', b'0999', b'0000']
[b'897', b'7W', b'7W', b'024', b'0150', b'0000']
[b'897', b'7W', b'7W', b'033', b'1892', b'0000']
[b'897', b'7W', b'7W', b'036', b'0100', b'0000']
[b'897', b'7W', b'7W', b'040', b'0300', b'0000']
[b'897', b'7W', b'7W', b'041', b'0100', b'0000']

Как мне отформатировать текст, например, результат:

897 7W 7W 018 0998 0000
897 7W 7W 018 0999 0000
897 7W 7W 024 0150 0000
etc...

Я думал о чем-то похожем ниже, но это не такработать, потому что есть несколько вещей, которые нужно удалить:

 data = a.read()
        data = data.replace("", "")
        a.write(data)

Ответы [ 3 ]

1 голос
/ 04 июня 2019

Это довольно просто сделать с помощью .join() и .decode():

lst = [b'897', b'7W', b'7W', b'018', b'0998', b'0000']

b" ".join(lst).decode("utf-8")

Выход:

'897 7W 7W 018 0998 0000'

В случае, если вам нужно сделать несколько:

lsts = [[b'897', b'7W', b'7W', b'018', b'0998', b'0000'], [b'897', b'7W', b'7W', b'018', b'0999', b'0000']]

formatted = [b" ".join(lst).decode("utf-8") for lsts in list]

Выход:

['897 7W 7W 018 0998 0000', '897 7W 7W 018 0999 0000']
0 голосов
/ 04 июня 2019

Вы можете использовать регулярное выражение для удаления всего, кроме новых строк, пробелов, чисел и заглавных букв:

data = """[b'897', b'7W', b'7W', b'018', b'0998', b'0000']
[b'897', b'7W', b'7W', b'018', b'0999', b'0000']
[b'897', b'7W', b'7W', b'024', b'0150', b'0000']
[b'897', b'7W', b'7W', b'033', b'1892', b'0000']
[b'897', b'7W', b'7W', b'036', b'0100', b'0000']
[b'897', b'7W', b'7W', b'040', b'0300', b'0000']
[b'897', b'7W', b'7W', b'041', b'0100', b'0000']"""

import re
data = re.sub(r"[^ 0-9A-Z\n]","",data)
print(data) # outputFile.write(data)

897 7W 7W 018 0998 0000
897 7W 7W 018 0999 0000
897 7W 7W 024 0150 0000
897 7W 7W 033 1892 0000
897 7W 7W 036 0100 0000
897 7W 7W 040 0300 0000
897 7W 7W 041 0100 0000

Или вы можете выбрать значения в одинарных кавычках и объединить их с разделителем пробелов:

data = "\n".join( " ".join(re.findall("'([^']*)'",line)) for line in data("\n")) 
0 голосов
/ 04 июня 2019

Из вашего поста видно, что у вас есть несколько списков "байтов" элементов:

>>> l = [b'897', b'7W', b'7W', b'018', b'0998', b'0000']
>>> l
[b'897', b'7W', b'7W', b'018', b'0998', b'0000']
>>> print(l)
[b'897', b'7W', b'7W', b'018', b'0998', b'0000']
>>> l[0]
b'897'

>>> type(l[0])
<class 'bytes'>

Элементы байтов должны быть декодированы в определенную кодировку для печати, и похоже, что UTF-8 будет работать для ваших данных:

>>> for i in l:
...     print(i.decode("utf-8"))
...
897
7W
7W
018
0998
0000

Есть много, много вещей, которые нужно знать о кодировках, и этот - классический (2003) пост, с которого можно начать.

[Предположим, современный Python (Python 3 +)]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...