PETL documentation指出,为了加载JSON,HTML,XML或text,数据只能来自文件。如何从内存中以任何一种格式(例如字符串变量而不是文件)将数据加载到PETL中?
当加载已经由上游代码清除或生成的数据时,这将很有用。仅写文件以重新读取文件是一种浪费和冒险(种族条件等)的操作。
答案 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 |
+-----+-----+