如何在python 3.4中预处理yaml文件?

时间:2015-06-02 15:18:13

标签: python python-3.x stream generator

背景是我有几百个Yaml文件是系统的配置文件。我想分析它们作为一个整体在他们的配置中寻找问题。

所以我需要预先处理每个文件,就像这个this question一样,在用它们做一些事情之前删除一些非法字符。但是,我是一个python新手,并不能提出工作的生成器解决方案。如果可能,不应修改真实文件。我正在使用python 3.4。

我的主要问题是没有调用迭代器函数,这让我觉得我没有正确访问迭代器行为。

基本上我有一个文件处理函数来处理目录中的所有文件,如下所示:

with open(os.path.join(myDir, fileName), 'r') as inputFile:
    print("about to call replace_iter")
    iterable = replace_iter(inputFile, "push", "force")
    print("about to call yaml.safe_load()")
    dataMap = yaml.safe_load(iterable)
    print("about to process my data map")
    type = dataMap['type']
    # process the dataMap ites ...
    print("done")

我在文件顶部定义了一个函数,如下所示

def replace_iter(iterable, search, replace):
    print("replace_iter called")
    for value in iterable:
        yield value.replace(search, replace)

这样就会跳过对生成器函数的调用,因此它表明我没有正确访问迭代器功能。

about to call replace_iter
about to call yaml.safe_load()

1 个答案:

答案 0 :(得分:2)

str.replace不会修改字符串,但会返回修改后的值:

  

str.replace(old, new[, count])
  返回字符串的副本,其中所有出现的substring old都替换为new。如果给出了可选参数计数,则仅替换第一次计数出现次数。

您需要改为返回值。

def replace_iter(iterable, search, replace):
    for value in iterable:
        yield value.replace(search, replace)