【问题标题】:How to preprocess a text stream on the fly in Python?如何在 Python 中动态预处理文本流?
【发布时间】:2018-07-14 07:16:00
【问题描述】:

我需要的是一个 Python 3 函数(或其他什么),它将接受一个文本流(如 sys.stdinopen(file_name, "rt") 返回的那个)并返回一个文本流以供其他函数使用,但删除所有空格,用逗号替换所有制表符,并在消费者代码读取数据时将所有字母即时转换为小写(“惰性”方式)。

我认为在 Python 3 中有一种相当简单的方法可以做到这一点,例如类似于列表推导式的方法,但目前还不知道它到底是什么。

【问题讨论】:

  • (e.replace(" ",'').replace("\t",',').lower() for e in file) 生成器可能会工作。它以“懒惰”的方式做事

标签: python text replace stream python-3.6


【解决方案1】:

我相信您正在寻找的是io 模块,更具体地说是io.StringIO

然后您可以使用open() 方法获取初始数据并进行修改,然后将其传递:

with open(file_name, 'rt') as f:
    stream = io.StringIO(f.read().replace(' ','').replace('\t',',').lower())

【讨论】:

    【解决方案2】:

    我不确定这是否是您的意思,但我能想到的最简单的方法是从文件继承(从打开返回的类型)并覆盖读取方法以在读取数据后执行您想要的所有操作。一个简单的实现是:

    class MyFile(file):
        def read(*args, **kwargs):
             data = super().read(*args,**kwargs)
             # process data eg. data.replace(' ',' ').replace('\t', ',').lower()
             return data
    

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2019-10-04
      • 2011-07-13
      相关资源
      最近更新 更多