Загрузка JSON, HTML, XML или текста в PETL из памяти, а не из файла - PullRequest
0 голосов
/ 08 февраля 2019

В документации PETL говорится, что для загрузки JSON , HTML , XML или text данные могут происходить только из файла.Как я могу загрузить данные в PETL в любом из этих форматов из памяти, такой как строковая переменная, а не файл?

Это будет полезно при загрузке данных, которые уже были очищены или сгенерированы вышестоящим кодом.Запись в файл только для повторного чтения файла является расточительной и рискованной операцией (условия гонки и т. Д.).

1 Ответ

0 голосов
/ 08 февраля 2019

Следующий вариант выглядит немного хакерским, но, по крайней мере, он избегает записи чего-либо на диск.

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   |
+-----+-----+
...