如何格式化以下文本?

时间:2019-06-04 18:29:05

标签: python text

我有这段文字:

[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 个答案:

答案 0 :(得分:1)

使用.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']

答案 1 :(得分:0)

从您的帖子中看来,您有"bytes"个项目的多个列表:

>>> 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

关于编码有很多事情要知道,this是一篇经典的文章(2003年),可以帮助您入门。

[假设使用现代Python(Python 3 +)]

答案 2 :(得分:0)

您可以使用正则表达式删除除换行符,空格,数字和大写字母之外的所有内容:

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"))