Следующий вариант выглядит немного хакерским, но, по крайней мере, он избегает записи чего-либо на диск.
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 |
+-----+-----+