python - Python3 流式字符串替换
问题描述
我有一个 python3“类文件对象”,它的read()
方法返回一个字符串 - 它来自打开的文件或从s3
using流式传输的对象boto3
。
我想在将流传递给之前对其进行清理csv.DictReader
,特别是因为该模块会在NUL
输入上的字符上出现错误。
我正在处理的 CSV 文件可能很大,所以我想做这个“流式传输”,而不是将整个文件/对象读入内存。
如何包装输入对象,以便我可以清理从read()
以下调用返回的每个字符串:.replace('\x00', '{NUL}')
?
我认为io
图书馆是看的地方,但我找不到明显做了我想要的东西 - 能够拦截和转换.read()
对底层类文件对象的每次调用并将包装器传递给csv
,而无需阅读整个事情一次。
解决方案
您可以使用一个简单的生成器函数来修复数据,然后再将其传递给csv.reader
:
import io
import csv
def denull(line_gen):
for line in line_gen:
yield line.replace('\x00', '{NUL}')
data = io.StringIO("""
hello;world
asdf;h\x00pla
""".strip())
for row in csv.reader(denull(data), delimiter=";"):
print(row)
打印出来
['hello', 'world']
['asdf', 'h{NUL}pla']
推荐阅读
- arrays - Laravel 5.5 如何在刀片视图中访问数组的一个值
- c# - 从 Xamarin 应用程序发送 base64 图像不起作用
- cakephp - Cakephp 4 - 实现每个路由的授权
- html - HTML中同一项目符号中的段落之间的垂直分隔
- barcode - 使用 QB45 将条码字符传输到 Zebra 打印机
- python - 出现异常时 pandas 的内存泄漏
- xaml - 在重命名页面后的 Xamarin.Forms 中,我收到错误“名称 'InitializeComponent' 不存在...”
- powermockito - SuppressStaticInitializationFor 是否可在项目级别配置
- php - [Route: time.update] [URI: time/{time}] 缺少必需的参数
- javascript - 如何通过按钮触发 CSS