首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析zcat输出

如何解析zcat输出
EN

Stack Overflow用户
提问于 2012-10-19 19:44:06
回答 3查看 556关注 0票数 0

在python中按\n\n拆分字符串的最简单方法是什么?

这是我的原始字符串,它来自http://ftp2.de.debian.org/debian/dists/stable/main/binary-i386/Packages.gz的zcat输出

代码语言:javascript
复制
Package: zziplib-bin\n
Priority: optional\n
Section: utils\n
Installed-Size: 116\n
Maintainer: LIU Qi <liuqi82@gmail.com>\n
Architecture: i386\n
Source: zziplib (0.13.56-1)\n
Version: 0.13.56-1+b1\n
...\n
\n
Package: zzuf\n
Priority: optional\n
Section: devel\n
Installed-Size: 228\n
Maintainer: Sam Hocevar <sho@debian.org>\n
Architecture: i386\n
Version: 0.13.svn20100215-2\n
...\n
\n

也许你们中的任何人都做过这样的事情

理想情况下应该是这样的:

代码语言:javascript
复制
{
"zziplib-bin": {"Version": "0.13.56-1+b1"},
"zzuf": {"Version": "0.13.svn20100215-2"},
...
}

  • Timo
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-19 20:13:43

我想通了。也许有人可以在这方面提出更好的建议。

代码语言:javascript
复制
a = zcat_output.split('\n\n')
a.pop(len(a)-1)
c = dict()
for x in [x.splitlines() for x in a]:
    pkg = ""
    for y in [y for y in x if y.startswith('Package:') or y.startswith('Version:')]:
        z = y.split(':')
        if z[0] == 'Package':
            pkg = z[1].strip()
        else:
            c[pkg] = {z[0]: z[1].strip()}

print c.get('whois')

输出:

代码语言:javascript
复制
{'Version': '5.0.10'}
票数 0
EN

Stack Overflow用户

发布于 2012-10-19 19:45:59

中,用\n\n拆分字符串的最简单方法是什么?

使用.split

代码语言:javascript
复制
>>> "a\n\nb\n\n\nc".split("\n\n")
['a', 'b', '\nc']
票数 2
EN

Stack Overflow用户

发布于 2012-10-20 05:22:38

下面的脚本将直接读取Packages.gz文件,并使用python的gzip模块对其进行解压缩,这样就可以省去使用zcat的额外步骤。然后,在按'\n\n'拆分之后,它检查每个包的详细信息,并使用正则表达式提取包的名称和版本。我已经为存储包及其版本信息的数据结构提供了两个实现。第二个遵循你的问题中提到的结构,第一个是一个更平坦的结构,它只是将每个包的名称映射到它的版本。

代码语言:javascript
复制
import gzip, re
packages = gzip.open('Packages.gz', 'rb').read()
p = packages.strip().split('\n\n')
pack = re.compile('^Package: (.*)')
ver = re.compile('\nVersion: (.*)')

info = dict([(pack.findall(i)[0], ver.findall(i)[0]) for i in p])
print info['whois']

info = dict([(pack.findall(i)[0], {'Version': ver.findall(i)[0]}) for i in p])
print info['whois']

输出

代码语言:javascript
复制
5.0.10
{'Version': '5.0.10'}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12973560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档