首先,我感谢您愿意提供的任何帮助,所以感谢您花时间阅读本文。另外,我使用python 3,但我会尽力为我的需要转换任何python 2语法。
我已经设法读取我的二进制文件以生成一个非常长的字符串。这是其中的一小部分:
grok{
match => "\[%{DAY:day} %{MONTH:month} %{MONTHDAY:monthday} %{TIME:time} %{YEAR:year}\]"
}
mutate {
add_field => {
"timestamp" => "\[%{DAY:day} %{MONTH:month} %{MONTHDAY:monthday} %{TIME:time} %{YEAR:year}\]"
}
}
我正在尝试将其转换为ASCII文本。 我挣扎的第一件事就是反斜杠。 我尝试过以下方法:
PUT _ingest/pipeline/pipe_celery_log
{
"processors": [
{
"patterns": ["\\[%{DAY:day} %{MONTH:month} %{MONTHDAY:monthday} %{TIME:time} %{YEAR:year}\\]"]
....................
这给了我:
myfile = "\xde\xad\xbe\xef\x01\x00\xe1\x07\x01\x00\x01\x00\x1e\x00\"
问题是我丢失了反斜杠。我想把它输出:
convert1 = myfile.split('\\\')
print(convert1)
从这里开始,我打算使用for循环将列表中的每个项目转换为序数,然后再转换回字符:
['xde', 'xad', 'xbe', 'xef', 'x01', 'x00', 'xe1', 'x07', 'x01', 'x00', 'x01', 'x00']
我希望这会给我ASCII字符,但如果你知道一种更简单的方法,我很乐意听到它。 在此先感谢您的帮助。
答案 0 :(得分:0)
您的myfile
代码不是有效的Python行。假设我们删除它的最后一个\
。如果你想使用ord()
将它分成每个单独的角色,那么简单的列表理解就可以了。
myfile = "\xde\xad\xbe\xef\x01\x00\xe1\x07\x01\x00\x01\x00\x1e\x00"
convert = [ ord( item ) for item in myfile ]
print( convert )
输出:[222, 173, 190, 239, 1, 0, 225, 7, 1, 0, 1, 0, 30, 0]
字节字符串的每个字符(" \ xde"," \ xad",...)本身都被计为单独的单位,因此迭代字节字符串将已经计数它们作为单独的单元,根本不需要将它分开。接下来你需要做的就是在每个单元上应用ord()
,同时迭代以获得你想要的结果。