2011-06-21 72 views
0

我想讀取python中的壓縮文件。我想只讀取其名稱中含有「debug」的文件,並且只打印其中包含BROKER_LOGON的行。它以某種方式不逐行讀取,而是打印其中包含BROKER_LOGON的整個文件。請告訴我是否有方法從壓縮文件逐行讀取。從python中的壓縮文件逐行讀取

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';名稱中的「debug」更具可讀性和「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(名稱)讀取原始文件的內容,將它們分割爲直線和然後掃描線。

1

您需要先解壓文件,然後逐行讀取。如果你不將它解壓縮,你會讀出壓縮字符數據(垃圾)。

+0

你的意思是我將不得不使用ZipFile.extract(member [,path [,pwd]])來提取它。 – Compuser7

+0

zfile = zipfile.ZipFile(「myZipFile.zip」,mode =「r」); zfile.extract( 「文件名」); zfile.close() – chisaipete

3

您可以直接在壓縮文件打開()的文件

嘗試這樣的事:

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