在巨大的文件中搜索和操作关键字的内容

时间:2016-09-21 00:28:27

标签: python

我有一个巨大的HTML文件,我已将其转换为文本文件。 (该文件是Facebook主页的来源)。假设文本文件在某些​​地方有一个特定的关键字。例如:" some_keyword:[bla bla]"。我如何打印some_keyword后面的所有不同的bla bla?

{id:"1126830890",name:"Hillary Clinton",firstName:"Hillary"}

想象一下,页面中有50种不同的名称。如何打印所有名称后跟" name:",考虑到文本非常大并且在您阅读(或尝试搜索其行)时崩溃。

示例文件:

shortProfiles:{"100000094503825":{id:"100000094503825",name:"Bla blah",firstName:"Blah",vanity:"blah",thumbSrc:"https://scontent-lax3-1.xx.fbcdn.net/v/t1.0-1/c19.0.64.64/p64x64/10354686_10150004552801856_220367501106153455_n.jpg?oh=3b26bb13129d4f9a482d9c4115b9eeb2&oe=5883062B",uri:"https://www.facebook.com/blah",gender:2,i18nGender:16777216,type:"friend",is_friend:true,mThumbSrcSmall:null,mThumbSrcLarge:null,dir:null,searchTokens:["Bla"],alternateName:"",is_nonfriend_messenger_contact:false},"1347968857":

2 个答案:

答案 0 :(得分:0)

根据您的评论,因为您是负责将数据写入文件的人。以JSON格式写入数据,并使用json.loads()将其从文件中读取为:

import json
json_file = open('/path/to/your_file')
json_str = json_file.read()
json_data = json.loads(json_str)


for item in json_data:
    print item['name']

<强>解释

让我们说data是存储

的变量
{id:"1126830890",name:"Hillary Clinton",firstName:"Hillary"}

将在您的代码中动态更改,您将在文件中执行写入操作。而是将其附加到列表中:

a = []
for item in page_content:
    # data = some xy logic on HTML file
    a.append(data)

现在使用以下代码将此列表写入文件:json.dump()

答案 1 :(得分:0)

我只是想把它扔出去,即使我同意所有关于直接处理html或使用Facebook的API(可能是最安全的方式)的评论,但Python中的打开文件对象可以用作生成器产生没有将整个文件读入内存的行,re模块可用于从文本中提取信息。

这可以这样做:

import re

regex = re.compile(r"(?:some_keyword:\s\[)(.*?)\]")

with open("filename.txt", "r") as fp:
    for line in fp:
        for match in regex.findall(line):
            print(match)

当然,这仅在文件采用“基于行”的格式时才有效,但最终结果是只有您所在的行在任何时候都被加载到内存中。

herere模块

的Python 2文档

herere模块

的Python 3文档

我找不到详细介绍Python中文件对象的生成器功能的文档,它似乎是众所周知的秘密之一...如果您知道Python文档中的哪个位置,请随时编辑并删除此段落很详细。