2011-06-21 15 views
0

私はPythonで圧縮ファイルを読み込もうとしています。私は、名前に "debug"を付けたファイルだけを読み込み、その中にBROKER_LOGONを持つ印刷行だけを読みたいと思っています。それは何とか行単位で読み込まれませんが、BROKER_LOGONを持つファイル全体が表示されます。圧縮されたファイルから行ごとに読み込む方法があるかどうか教えてください。Pythonで圧縮されたファイルから1行ずつ読む

import os 

import zipfile 

import re 

def main(): 
try: 
    root = zipfile.ZipFile("C:/Documents and Settings/Desktop/20110526-1708-server.zip", "r") 
except: 
    root = "." 
for name in root.namelist(): 
    i = name.find("debug") 
    if i>0: 
     line = root.read(name).find("BROKER_LOGON") 
     if line >0: 
      print line 


if __name__== "__main__": 
    main() 
+0

'name.find(" debug ")> 0'を使用しないでください。 '' nameの ''デバッグ 'は、より読みやすく、 "pythonic"です。 –

答えて

3
for name in root.namelist(): 
    if name.find("debug") >= 0: 
     for line in root.read(name).split("\n"): 
      if line.find("BROKER_LOGON") >= 0: 
       print line 

このコードは、root.read(名前)とRAWファイルの内容を読み取りラインにそれらを分割して、行をスキャンします。

1

ファイルを解凍してから、1行ずつ読む必要があります。あなたはそれを解凍していない場合は、圧縮された文字データを読み込みます(ごみ)

+0

あなたはZipFile.extract(member [、path [、pwd]])を使ってそれを抽出しなければならないという意味ですか? – Compuser7

+0

zfile = zipfile.ZipFile( "myZipFile.zip"、mode = "r"); zfile.extract( "filename"); zfile.close() – chisaipete

3

あなたはZIPファイル

内で直接)(ファイルを開くことができ、このような何かを試してみてください。

try: 
    root = zipfile.ZipFile("C:/Documents and Settings/Desktop/20110526-1708-server.zip", "r") 
except: 
    root = "." 
for name in root.namelist(): 
    i = name.find("debug") 
    if i>0: 
     lines = root.open(name).readlines() 
     for line in lines: 
      if line.find("BROKER_LOGON") > 0: 
       print line 

readlines()から返された行のリストを使用して、任意の操作を行うことができます。

0

ZipFile.read()は、改行文字で、それを分割して、そのようにそれを確認することができ、ファイル全体を返しますが:

file_data = root.read(name) 
for line in file_data.split("\r\n"): 
    if line.find("BROKER_LOGIN") > 0: 
     print line 

たStringIOを使用するために多くのメモリ効率的かもしれないが。

from StringIO import StringIO 

stream = StringIO(root.read(name)) 
for line in stream: 
    if line.find("BROKER_LOGIN") > 0: 
     print line 
関連する問題