簡體   English   中英

從python中的壓縮文件逐行讀取

[英]Reading line by line from a zipped file in 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()

您可以直接在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()返回的行列表做任何您想做的事情。

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)讀取原始文件內容,將它們拆分為幾行,然后掃描這些行。

您需要先解壓縮文件,然后逐行閱讀。 如果不解壓縮,則將讀取壓縮的字符數據(垃圾內容)。

盡管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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM