python-3.x - 将 JSON、HTML、XML 或文本从内存而不是文件加载到 PETL
问题描述
PETL文档指出,为了加载JSON、HTML、XML或文本,数据只能来自文件。如何从内存中以任何这些格式将数据加载到 PETL 中,例如字符串变量而不是文件?
这在加载已经被上游代码清理或生成的数据时很有用。仅写入文件以重新读取文件是一种浪费且有风险的(竞争条件等)操作。
解决方案
以下感觉有点hacky,但至少它避免了将任何内容写入磁盘。
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 |
+-----+-----+
推荐阅读
- azure - 如何使用 spring-data-cosmosdb 为 CosmosDB 中的整个数据库设置吞吐量(RU)?
- api - 尝试在Vuejs中通过xhr调用api,使用promise存储响应,不识别.then()
- node.js - DynamoDB NewImage 流不返回所有字段
- c - 对数字字符串使用 strcmp() 感到困惑
- python - 无法使用 smtplib 向我的电子邮件发送附件
- java - 具有 python 和 java 语言支持的 AWS lambda
- r - 使用 R 模拟马尔可夫链
- sql - 我将如何使用餐桌,然后只退回出现 3 次或更多的物品?
- c# - ASP.NET (4.X - NOT Core) - 如何设置 Azure AD 身份验证
- bash - 使用环境变量或默认值(如果不存在)设置 PowerShell 变量