相关疑难解决方法(0)

从python中的缩进文本文件创建树/深层嵌套的dict

基本上,我想迭代一个文件并将每行的内容放入一个深度嵌套的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.

目前我正试图按照这样的步骤制作一个字典和一个列表:

  1. {"a":""} ["a"]
  2. {"a":"b"} ["a"]
  3. {"a":{"b":"c"}} ["a","b"]
  4. {"a":{"b":{"c":"d"}}}} ["a","b","c"]
  5. {"a":{"b":{"c":"d"},"e":""}} ["a","e"]
  6. {"a":{"b":{"c":"d"},"e":"f"}} ["a","e"]
  7. {"a":{"b":{"c":"d"},"e":{"f":"g"}}} ["a","e","f"]

等等

该列表的行为类似于"breadcrumbs",显示了我最后输入dict的位置.

要做到这一点,我需要一种方法来遍历列表并生成类似于dict["a"]["e"]["f"]获取最后一个字典的内容.我已经看过有人制作的AutoVivification类看起来非常有用但是我真的不确定:

  1. 我是否正在使用正确的数据结构(我打算将其发送到JSON库以创建JSON对象)
  2. 如何在此实例中使用AutoVivification
  3. 是否有更好的方法来解决这个问题.

我提出了以下功能,但它不起作用:

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)

python parsing dictionary nested data-structures

10
推荐指数
2
解决办法
1万
查看次数

解析EDGAR文件

我想使用python2.7从EDGAR文件中删除任何不是文档文本的内容(可以在线获得.txt文件).文件的外观示例如下:

EDGAR从此文件的第48页开​​始提供其文档类型定义:

DTD

我的程序的第一部分将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有关并且我不关心标题 - 我只关心文件的文本.

python sgml parsing python-2.7

8
推荐指数
1
解决办法
1万
查看次数

使用lxml解析Python中带有错误标题的文本文件

我想用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 lxml

6
推荐指数
1
解决办法
3450
查看次数

Python:解析 SGML

我正在尝试在 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 数据集。)

python sgml parsing beautifulsoup xml-parsing

3
推荐指数
1
解决办法
4135
查看次数