![](/img/trans.png)
[英]python 3 - reading a file within zipped archive places 'b' character at start of each line
[英]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.