2012-10-19 2 views
0

\n\n으로 문자열을 파이썬으로 분할하는 가장 쉬운 방법은 무엇입니까?zcat 출력을 구문 분석하는 방법

이것은 아마도 당신의 이제까지이 이상적으로 다음과 같아야이

했을 http://ftp2.de.debian.org/debian/dists/stable/main/binary-i386/Packages.gz

Package: zziplib-bin\n 
Priority: optional\n 
Section: utils\n 
Installed-Size: 116\n 
Maintainer: LIU Qi <[email protected]>\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 <[email protected]>\n 
Architecture: i386\n 
Version: 0.13.svn20100215-2\n 
...\n 
\n 

의하라 zcat 출력에서 ​​오는 내 원시 문자열입니다

{ 
"zziplib-bin": {"Version": "0.13.56-1+b1"}, 
"zzuf": {"Version": "0.13.svn20100215-2"}, 
... 
} 

- 티모

답변

0

나는 그것을 알아 냈다. 어쩌면 누군가가 그것에 대해 더 나은 제안을 할 수 있습니다.

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') 

출력 :

{'Version': '5.0.10'} 
2

파이썬에서 문자열을 \ n \ n 분할하는 가장 쉬운 방법은 무엇입니까?

사용 .split

>>> "a\n\nb\n\n\nc".split("\n\n") 
['a', 'b', '\nc'] 
1

이 당신에게 zcat을 사용해야하는 추가 단계를 저장해야하므로 아래 스크립트는 넣고 Packages.gz 파일을 직접 파이썬의 gzip을 모듈을 사용하여 압축을 읽습니다. 그런 다음 '\n\n'으로 분할 한 후 각 패키지 세부 정보를 검토하고 정규 표현식을 사용하여 패키지 이름과 버전을 추출합니다. 패키지와 버전 정보를 저장할 데이터 구조에 대한 두 가지 구현을 제공했습니다. 두 번째는 질문에 언급 된 구조를 따르고, 첫 번째 것은 각 패키지 이름을 버전에 매핑하는 평면 패키지입니다.

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'] 

출력

5.0.10 
{'Version': '5.0.10'} 
관련 문제