gpt4 book ai didi

用于提取字段的 Python 一行代码

转载 作者:太空狗 更新时间:2023-10-30 02:05:56 27 4
gpt4 key购买 nike

输入:

$ ./ffmpeg -i test020.3gp                                                                                                               
ffmpeg version UNKNOWN, Copyright (c) 2000-2011 the FFmpeg developers
built on May 5 2011 14:30:25 with gcc 4.4.3
configuration:
libavutil 51. 2. 0 / 51. 2. 0
libavcodec 53. 3. 0 / 53. 3. 0
libavformat 53. 0. 3 / 53. 0. 3
libavdevice 53. 0. 0 / 53. 0. 0
libavfilter 2. 4. 0 / 2. 4. 0
libswscale 0. 14. 0 / 0. 14. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test020.3gp':
Metadata:
major_brand : 3gp4
minor_version : 512
compatible_brands: 3gp4
creation_time : 2004-07-01 09:59:21
Duration: 00:01:02.20, start: 0.000000, bitrate: 284 kb/s
Stream #0.0(und): Audio: aac, 44100 Hz, stereo, s16, 96 kb/s
Metadata:
creation_time : 2004-07-01 09:59:21
Stream #0.1(und): Video: mpeg4, yuv420p, 176x120 [PAR 1:1 DAR 22:15], 184 kb/s, 15 fps, 15 tbr, 30k tbn, 15 tbc
Metadata:
creation_time : 2004-07-01 09:59:23
At least one output file must be specified

假设我想使用以下正则表达式提取宽度和高度:

(\d+x\d+)

使用 perl,我会做这样的事情:

$ ./ffmpeg -i test020.3gp 2>&1 | perl -lane 'print $1 if /(\d+x\d+)/'
176x120

然后我尝试构建一个类似的 python 单行代码,它有点工作,但并不完美:

$ ./ffmpeg -i test020.3gp 2>&1 | python -c "import sys,re;[sys.stdout.write(str(re.findall(r'(\d+x\d+)', line))) for line in sys.stdin]"
[][][][][][][][][][][][][][][][][][][]['176x120'][][][]

与 perl 对应的 python 单行看起来像什么?

最佳答案

你想要的是 re.search 而不是 re.findall

即使单行本本身有点“丑陋”(/tmp/p 只是您提供的样本数据),这也能达到目的:

% cat /tmp/p 2>&1 | python -c "import re,sys; print re.search(r'(\d+x\d+)', sys.stdin.read()).group()"
176x120

您不只是使用 grep(在本例中为 egrep)的原因是什么?

% cat /tmp/p | egrep -o '[0-9]+x[0-9]+'
176x120

关于用于提取字段的 Python 一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7362770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com