从内存而非文件中将JSON,HTML,XML或文本加载到PETL中

时间:2019-02-08 09:39:37

标签: python-3.x file memory petl

PETL documentation指出,为了加载JSONHTMLXMLtext,数据只能来自文件。如何从内存中以任何一种格式(例如字符串变量而不是文件)将数据加载到PETL中?

当加载已经由上游代码清除或生成的数据时,这将很有用。仅写文件以重新读取文件是一种浪费和冒险(种族条件等)的操作。

1 个答案:

答案 0 :(得分:0)

以下内容有些,但至少可以避免将任何内容写入磁盘。

import petl
from io import StringIO


d = '''<table>
        <tr>
            <td>foo</td><td>bar</td>
        </tr>
        <tr>
            <td>a</td><td>1</td>
        </tr>
        <tr>
            <td>b</td><td>2</td>
        </tr>
        <tr>
            <td>c</td><td>2</td>
        </tr>
    </table>'''


class OpenableString():

    def __init__(self, str):
        self.value = StringIO(str)

    def open(self, mode):
        return self

    def __exit__(self, type, value, traceback):
        pass

    def __enter__(self):
        return self.value


os = OpenableString(d)

table1 = petl.fromxml(os, 'tr', 'td')

print(table1)

输出:

+-----+-----+
| foo | bar |
+=====+=====+
| a   | 1   |
+-----+-----+
| b   | 2   |
+-----+-----+
| c   | 2   |
+-----+-----+