Python解析Bash输出时如何去除b'前缀?
Python写入文件出现b'前缀的原因及解决办法
原因分析
- 你的
exec_command函数返回的是三元组:(返回码, 标准输出bytes, 标准错误bytes),但你直接把整个元组赋值给了ffgrading_json。 - Python中
bytes类型的字符串表示自带b'...'标识,当你调用str(ffgrading_json)把整个元组转成字符串时,就会把这个标识也包含进去,最终写入文件后就出现了b'前缀。
解决步骤
1. 正确提取标准输出内容
调用exec_command时,解构返回的元组,只取出标准输出部分:
# 用下划线忽略不需要的返回码和标准错误 _, ffgrading_stdout, _ = exec_command(f'{options["path_ffprobe"]} -loglevel quiet -print_format json -read_intervals "%+#2" -select_streams v:0 -show_entries side_data "{path}" | egrep -m 1 -A 10 "Mastering display metadata" | grep -v "Mastering display metadata"|tr -d "[:space:]"| tr -d "\n"')
2. 将二进制输出解码为字符串
把bytes类型的输出解码成普通UTF-8字符串:
ffgrading_str = ffgrading_stdout.decode('utf-8')
3. 写入文件
直接写入解码后的字符串,无需再用str()转换:
with open('/tmp/grading.json', 'w') as f: f.write(ffgrading_str)
简化版代码
可以把步骤合并,减少代码量:
_, stdout, _ = exec_command(f'{options["path_ffprobe"]} -loglevel quiet -print_format json -read_intervals "%+#2" -select_streams v:0 -show_entries side_data "{path}" | egrep -m 1 -A 10 "Mastering display metadata" | grep -v "Mastering display metadata"|tr -d "[:space:]"| tr -d "\n"') with open('/tmp/grading.json', 'w') as f: f.write(stdout.decode('utf-8'))
内容的提问来源于stack exchange,提问作者user20334066
相关产品推荐
相关产品推荐

