python字典转字符串并输出其长度_从Python中SOX的字符串输出中获取字典中的可用数据...

开源软件SOX是一个命令行界面工具,可以处理音频文件。它具有stat函数,该函数返回与音频文件有关的数据。该数据以字符串形式返回-很难使用的字符串。

下面是由SOX返回的字符串的示例。

\ n输入文件:'E:\ path \ to \ file \ filename.wav'\ n通道:1 \ n采样率:176400 \ n精度:16位\ n持续时间:00:00:30.00 = 5292001个样本〜2250个CDDA扇区\ nFile大小:10.6M \ n比特率:2.82M \ n示例编码:16位带符号整数PCM \ n“

和...

读取的样本:5292001 \ n长度(秒):30.000006 \ n缩放比例:2147483647.0 \ n最大振幅:0.705475 \ n最小振幅:-0.705475 \ n中线振幅:0.000000 \ n平均模数:0.449045 \ n平均振幅:0.000153 \ nRMS振幅:0.498788 \ n最大增量:1.410950 \ n最小变化量:0.000000 \ n平均变化量:0.571030 \ nRMS变化量:0.704606 \ n粗糙频率:39659 \ n音量调整:1.417 \ n \ n尝试:-t raw -e mu-law -b 8'

一个值可能具有的字符数可以从一个文件更改为另一个文件,并且某些文件实际上将完全丢失某些值。

如何从这些字符串中获取简单的值字典?

解决方案

您可以split打开'\n',然后dict通过拆分将对提供给构造函数':':

给定第二个示例字符串:

>>> s = """Samples read: 5292001\nLength (seconds): 30.000006\nScaled by: 2147483647.0\nMaximum amplitude: 0.705475\nMinimum amplitude: -0.705475\nMidline amplitude: 0.000000\nMean norm: 0.449045\nMean amplitude: 0.000153\nRMS amplitude: 0.498788\nMaximum delta: 1.410950\nMinimum delta: 0.000000\nMean delta: 0.571030\nRMS delta: 0.704606\nRough frequency: 39659\nVolume adjustment: 1.417\n\nTry: -t raw -e mu-law -b 8 '"""

可以通过以下方式创建字典:

>>> dict(r.strip().split(':', 1) for r in s.split('\n') if r)

其中,if r负责过滤掉空行和1在分裂负责执行只在一组(这样的字符串一样Duration有很多":"不会得到分头多次)。

这样产生:

{'Length (seconds)': ' 30.000006',

'Maximum amplitude': ' 0.705475',

'Maximum delta': ' 1.410950',

'Mean amplitude': ' 0.000153',

'Mean delta': ' 0.571030',

'Mean norm': ' 0.449045',

'Midline amplitude': ' 0.000000',

'Minimum amplitude': ' -0.705475',

'Minimum delta': ' 0.000000',

'RMS amplitude': ' 0.498788',

'RMS delta': ' 0.704606',

'Rough frequency': ' 39659',

'Samples read': ' 5292001',

'Scaled by': ' 2147483647.0',

'Try': " -t raw -e mu-law -b 8 '",

'Volume adjustment': ' 1.417'}

同样,对于第一个示例字符串:

>>> s = """\nInput File : 'E:\\path\\to\\file\\filename.wav'\nChannels : 1\nSample Rate : 176400\nPrecision : 16-bit\nDuration : 00:00:30.00 = 5292001 samples ~ 2250 CDDA sectors\nFile Size : 10.6M\nBit Rate : 2.82M\nSample Encoding: 16-bit Signed Integer PCM\n"""

>>> dict(r.strip().split(':', 1) for r in s.strip().split('\n') if r)

{'Bit Rate ': ' 2.82M',

'Channels ': ' 1',

'Duration ': ' 00:00:30.00 = 5292001 samples ~ 2250 CDDA sectors',

'File Size ': ' 10.6M',

'Input File ': " 'E:\\path\\to\\file\\filename.wav'",

'Precision ': ' 16-bit',

'Sample Encoding': ' 16-bit Signed Integer PCM',

'Sample Rate ': ' 176400'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值