从python中的压缩文件中逐行读取

时间:2011-06-21 16:37:18

标签: python

我正在尝试在python中读取压缩文件。我想只读取名称中带有“debug”的文件,只读取其中包含BROKER_LOGON的打印行。它以某种方式逐行读取,但打印出包含BROKER_LOGON的整个文件。请告诉我是否有办法从压缩文件中逐行阅读。

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

4 个答案:

答案 0 :(得分:3)

您可以直接在zipfile中打开()文件

尝试这样的事情:

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()返回的行列表执行任何操作。

答案 1 :(得分: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(name)读取原始文件内容,将它们拆分为行,然后扫描行。

答案 2 :(得分:1)

您需要先解压缩文件,然后逐行读取。如果你不解压缩它,你将读取压缩的字符数据(垃圾。)

答案 3 :(得分: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