我正在尝试在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()
答案 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