基本上,我想迭代一个文件并将每行的内容放入一个深度嵌套的dict中,其结构由每行开头的空白量定义.
基本上我们的目标是采取这样的方式:
a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)
把它变成这样的东西:
{"a":{"b":"c","d":"e"}}
Run Code Online (Sandbox Code Playgroud)
或这个:
apple
colours
red
yellow
green
type
granny smith
price
0.10
Run Code Online (Sandbox Code Playgroud)
进入这个:
{"apple":{"colours":["red","yellow","green"],"type":"granny smith","price":0.10}
Run Code Online (Sandbox Code Playgroud)
这样我就可以将它发送到Python的JSON模块并制作一些JSON.
目前我正试图按照这样的步骤制作一个字典和一个列表:
{"a":""} ["a"]
{"a":"b"} ["a"]
{"a":{"b":"c"}} ["a","b"]
{"a":{"b":{"c":"d"}}}} ["a","b","c"]
{"a":{"b":{"c":"d"},"e":""}} ["a","e"]
{"a":{"b":{"c":"d"},"e":"f"}} ["a","e"]
{"a":{"b":{"c":"d"},"e":{"f":"g"}}} ["a","e","f"]
等等
该列表的行为类似于"breadcrumbs",显示了我最后输入dict的位置.
要做到这一点,我需要一种方法来遍历列表并生成类似于dict["a"]["e"]["f"]
获取最后一个字典的内容.我已经看过有人制作的AutoVivification类看起来非常有用但是我真的不确定:
我提出了以下功能,但它不起作用:
def get_nested(dict,array,i):
if i != None:
i += 1
if array[i] in dict:
return get_nested(dict[array[i]],array)
else:
return dict
else:
i = 0
return get_nested(dict[array[i]],array)
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助!
(其余的非常不完整的代码在这里:)
#Import relevant libraries
import codecs
import …
Run Code Online (Sandbox Code Playgroud) 我想使用python2.7从EDGAR文件中删除任何不是文档文本的内容(可以在线获得.txt文件).文件的外观示例如下:
EDGAR从此文件的第48页开始提供其文档类型定义:
我的程序的第一部分将EDGAR在线数据库中的.txt文件转换为我命名为"parseme.txt"的本地文件.我想知道的是如何使用DTD来解析.txt文件.我会使用像BeautifulSoup这样的罐装解析模块来完成工作,但EDGAR的格式看起来很独特,我希望避免使用大型正则表达式来完成工作.
import os
filename = 'parseme.txt'
with open(filename) as f:
lines = f.readlines()
Run Code Online (Sandbox Code Playgroud)
我的问题与Parse SGML中的问题有关,在Python 3中使用开放任意标记,并使用lxml来解析Python中带有错误标题的文本文件,但我相信我的问题与python2.7有关并且我不关心标题 - 我只关心文件的文本.
我想用lxml的etree解析文本文件(本地存储).但是我的所有文件(数千个)都有标题,例如:
-----BEGIN PRIVACY-ENHANCED MESSAGE-----
Proc-Type: 2001,MIC-CLEAR
Originator-Name: webmaster@www.sec.gov
Originator-Key-Asymmetric:
MFgwCgYEVQgBAQICAf8DSgAwRwJAW2sNKK9AVtBzYZmr6aGjlWyK3XmZv3dTINen
TWSM7vrzLADbmYQaionwg5sDW3P6oaM5D3tdezXMm7z1T+B+twIDAQAB
MIC-Info: RSA-MD5,RSA,
AHxm/u6lqdt8X6gebNqy9afC2kLXg+GVIOlG/Vrrw/dTCPGwM15+hT6AZMfDSvFZ
YVPEaPjyiqB4rV/GS2lj6A==
<SEC-DOCUMENT>0001193125-07-200376.txt : 20070913
<SEC-HEADER>0001193125-07-200376.hdr.sgml : 20070913
<ACCEPTANCE-DATETIME>20070913115715
ACCESSION NUMBER: 0001193125-07-200376
CONFORMED SUBMISSION TYPE: 10-K
PUBLIC DOCUMENT COUNT: 7
CONFORMED PERIOD OF REPORT: 20070630
FILED AS OF DATE: 20070913
DATE AS OF CHANGE: 20070913
Run Code Online (Sandbox Code Playgroud)
<
在这种情况下,第一个直到第51行(并且在所有情况下都不是51).xml部分如下所示:
</SEC-HEADER>
<DOCUMENT>
<TYPE>10-K
<SEQUENCE>1
<FILENAME>d10k.htm
<DESCRIPTION>FORM 10-K
<TEXT>
<HTML><HEAD>
<TITLE>Form 10-K</TITLE>
</HEAD>
<BODY BGCOLOR="WHITE">
<h5 align="left"><a href="#toc">Table of Contents</a></h5>
Run Code Online (Sandbox Code Playgroud)
我可以使用lxml动态处理吗?或者我应该使用流编辑器来省略每个文件的标题?谢谢!
这是我当前的代码和错误.
from lxml import etree
f = etree.parse('temp.txt')
XMLSyntaxError: Start …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Python 中解析一些 SGML,如下所示:
<!DOCTYPE lewis SYSTEM "lewis.dtd">
<TEXT>
<TITLE>One</TITLE>
<BODY>Sample One</BODY>
</TEXT>
<TEXT>
<TITLE>Two</TITLE>
<BODY>Sample Two</BODY>
</TEXT>
Run Code Online (Sandbox Code Playgroud)
在这里,我只是寻找<BODY>
标签内的所有内容(即["Sample One", "Sample Two"]
)。
我尝试过使用 BeautifulSoup,但它不喜欢<!DOCTYPE>
第一行中的 ,并且还期望所有内容都包含在像 这样的根标签周围<everything></everything>
。虽然我可以在将其传递到 BeautifulSoup 之前手动进行这些更改,但感觉有点太老套了。
我对 SGML 还很陌生,也没有与 BeautifulSoup 结婚,所以我愿意接受任何建议。
(对于那些好奇的人:我的具体用例是 reuters21578 数据集。)