我有一个巨大的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":
答案 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)
当然,这仅在文件采用“基于行”的格式时才有效,但最终结果是只有您所在的行在任何时候都被加载到内存中。
here是re
模块
here是re
模块
我找不到详细介绍Python中文件对象的生成器功能的文档,它似乎是众所周知的秘密之一...如果您知道Python文档中的哪个位置,请随时编辑并删除此段落很详细。