好的,所以我是整个蟒蛇世界的新手所以请耐心等待。
背景:我们正在尝试将日志卸载到mongo中,以便能够更快地查询和搜索它们。设备已经以合适的格式打印它们,除了每个之间} {开始和结束数据对象,如下所示:
¾ïúÀï{"id":"xxx","timestamp":xxx,"payloadType":"xxx","payload":{"protocol":"xxx","zoneID":xxx,"zoneName":"xxx","eventType":"xxx"}}’ÂCº¾ïúÀï{"id":"xxx","timestamp":xxx,"payloadType":"xxx","payload":{"protocol":"xxx","zoneID":xxx,"zoneName":"xxx","eventType":"xx}}
使用以下内容我已经能够将其转换为字节,然后返回到输出为:
的字符串f = open('logfile', 'r')
file_data = f.read()
f.close()
data = file_data.encode('utf-8')
print(str(data))
>>>b'\xc2\xbe\xc3\xaf\xc3\xba\xc3\x80\x01\xc3\xaf{"id":"xxx","timestamp":xxx,"payloadType":"xxx","payload":{"protocol":"xxx","zoneID":xxx,"zoneName":"xxx","eventType":"xxx"}}
在我看来,这比上面看到的丑陋角色更容易处理,但我不知道。
这只是一个示例..此日志中返回了数千行。在我看来,理想情况下,最好的方法是删除字符串开头的所有字符{和所有字符之间}} {
答案 0 :(得分:3)
将字符串编码为字节,然后解码回ASCII:
data.encode().decode('ascii',errors='ignore')
# {"id":"xxx","timestamp":xxx,...}}
您还可以使用正则表达式删除最外侧花括号外的所有字符:
re.sub(r'^[^{]*(?={)|(?<=})[^}{]*(?={)|(?<=})[^}]*$', '', data)
后一种机制偶然也会删除你不想要的ASCII“C”字符。
答案 1 :(得分:1)
ForEach(var type in TypesThatImplement<Ifoo>){
DoThing.Doit<type>();
}
应该产生输出......
DoThing.Doit<TypeA>();
DoThing.Doit<TypeB>();
DoThing.Doit<TypeC>();
答案 2 :(得分:0)
如下:
import string
cleaned_string = ''
for char in ugly_string:
if char in string.printable:
cleaned_string += char
This question也处理类似的问题。
答案 3 :(得分:0)
如果垃圾字节不包含左大括号,您可以执行以下操作:
fmt.Printf("user: %s, password: %s, dbName: %s", user, password, dbName)
connectionString := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=%s", user, password, dbName, "disable")
var err error
a.DB, err = sql.Open("postgres", connectionString)
if err != nil {
log.Fatal(err)
}
rows, err := a.DB.Query("SELECT ( * ) FROM land_registry_price_paid_uk")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
println(rows)
for rows.Next() {
var name string
if err := rows.Scan(&name); err != nil {
log.Fatal(err)
}
fmt.Printf("this is something: %s\n", name)
否则,在不知道这些垃圾字节可以包含什么以及您的JSON是否是纯ASCII的情况下,我认为最好的解决方案是尝试一遍又一遍地从数据中解析JSON编码的对象并跳过垃圾字节隐式:
def decode_all(data):
decoder = JSONDecoder()
end_index = 0
while data:
try:
data = data[data.index('{', end_index):]
except ValueError:
break
obj, end_index = decoder.raw_decode(data)
yield obj
答案 4 :(得分:0)
我使用了 exifread 。简而言之,请使用 .printable 获取值的字符串。 这是获取某些选择标签的值并将其包装在名为context的字典中的代码:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="flyout-module">
<a href="#" class="trigger">Link</a>
<div class="flyout flyout-tags">
<p>content goes here</p>
<p>content goes here</p>
<p>content goes here</p>
<a href="#" class="close-btn" title="Close"><span>×</span></a>
</div>
</div>
<div class="flyout-module">
<a href="#" class="trigger">Link</a>
<div class="flyout flyout-tags">
<p>content goes here</p>
<p>content goes here</p>
<p>content goes here</p>
<a href="#" class="close-btn" title="Close"><span>×</span></a>
</div>
</div>
<div class="flyout-module">
<a href="#" class="trigger">Link</a>
<div class="flyout flyout-tags">
<p>content goes here</p>
<p>content goes here</p>
<p>content goes here</p>
<a href="#" class="close-btn" title="Close"><span>×</span></a>
</div>
</div>