第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在python中解析超大文件?

如何在python中解析超大文件?

白板的微信 2021-04-01 14:15:22
我有這個日志文件“ internet.log”,大約10GB。當(dāng)我在python中解析它時,出現(xiàn)異?!?MemoryError”。日志文件看起來像這樣...Jun 15 16:26:21 dnsmasq[1979]: reply fd-geoycpi-uno.gycpi.b.yahoodns.net is 74.6.160.107Jun 15 16:26:21 dnsmasq[1979]: reply fd-geoycpi uno.gycpi.b.yahoodns.net is 216.115.100.123Jun 15 16:26:21 dnsmasq[1979]: reply fd-geoycpi-uno.gycpi.b.yahoodns.net is 216.115.100.124Jun 15 16:26:21 dnsmasq[1979]: reply fd-geoycpi-uno.gycpi.b.yahoodns.net is 74.6.160.106Jun 15 16:26:21 dnsmasq[1979]: query[A] fd-geoycpi-uno.gycpi.b.yahoodns.net from 192.168.1.33Jun 15 16:26:21 dnsmasq[1979]: cached fd-geoycpi-uno.gycpi.b.yahoodns.net is 74.6.160.106Jun 15 16:26:21 dnsmasq[1979]: cached fd-geoycpi-uno.gycpi.b.yahoodns.net is 216.115.100.124Jun 15 16:26:21 dnsmasq[1979]: cached fd-geoycpi-uno.gycpi.b.yahoodns.net is 216.115.100.123Jun 15 16:26:21 dnsmasq[1979]: cached fd-geoycpi-uno.gycpi.b.yahoodns.net is 74.6.160.107Jun 15 16:26:23 dnsmasq[1979]: query[A] armdl.adobe.com from 192.168.1.24我目前正在使用此方法來解析日志文件:def parse():Date = []IPAddress = []DomainsVisited = []with open("internet.log", "r") as file:    content = file.readlines()    for items in content:        if 'query[A]' in items:            getDate(Date, items)            getIPAddress(IPAddress, items)            getDomainsVisited(DomainsVisited, items)finalResult = [[i, j, k] for i, j, k in zip(Date, IPAddress, DomainsVisited)]return display(finalResult)如果我解析一個說10MB的日志文件,則顯示輸出,但是當(dāng)我解析10GB的日志文件時,我得到了錯誤。我怎樣才能解決這個問題?謝謝你。
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個贊

您不應(yīng)該使用file.readlines()。這樣做會立即將整個文件讀入內(nèi)存,這很可能會立即將其填滿。相反,遍歷文件:


with open("internet.log", "r") as file:

    for items in file:

(當(dāng)然,取決于您對數(shù)據(jù)的處理方式,當(dāng)您遍歷文件時,這仍然可能會中斷。)


查看完整回答
反對 回復(fù) 2021-04-13
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個贊

您正在使用讀取整個文件到內(nèi)存中readlines。


您可以說一次讀一行for items in file。


使用更好的變量名和列表理解來稍微整理代碼,以生成結(jié)果:


with open("internet.log") as log:

    finalResults = [[getDate(line), getIPAddress(line), getDomainsVisited(line)]

                    for line in log

                    if 'query[A]' in line]

我將結(jié)果提取到一個函數(shù):


def parse_log_line(line):

    return [getDate(line),

            getIPAddress(line),

            getDomainsVisited(line)]

那么您的代碼將是:


with open("internet.log") as log:

    finalResults = [parse_log_line(line)

                    for line in log

                    if 'query[A]' in line]


查看完整回答
反對 回復(fù) 2021-04-13
  • 2 回答
  • 0 關(guān)注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號