在文件中查找字符串并替换下一行

时间:2018-02-12 00:51:31

标签: python python-3.x cson

我有一个CSON(Coffeescript JSON)文件,看起来像这样:

'main key':

    subkey: 
        someKey: 'some value'
        someKey: 'some value'

    subkey:
        someKey: 'some value'
        someKey: 'some value'

    specialKey: [
        'special value X'
        'special value Y'
    ]

    subkey:
        someKey: 'some value'
        someKey: 'some value'
        someKey: 'some value'

#And the list goes on and on...

所以我想找到并定位specialKey并将special value Xspecial value Y替换为其他值,请记住,CSON的性质是缩进敏感的

我已经考虑过从specialKey获取行号并替换接下来的两行号码,但就我而言,我无法找到在Python中按编号编辑特定行的方法

(作为旁注,我知道pycson library但是我无法输出除单行JSON以外的任何内容,我宁愿保留在CSON中,因为我希望在长文件中保持可读性,并且不想弄乱用户的原始文件。)

1 个答案:

答案 0 :(得分:0)

好的,我再次回答了自己的问题。它可能不是最有效或最优雅的,但它是:

from shutil import move

count = 0
with open('fileInput.cson') as fileIn, open('fileInput.cson.tmp', 'w') as fileOut:
    for item in fileIn:
        if count == 1:
            item = "      \'NEW special value Y\'\n"
            count -= 1
        if count == 2:
            item = "      \'NEW special value X\'\n"
            count -= 1

        if item.strip().startswith('specialKey:'):
            count = 2

        fileOut.write(item)

move('fileInput.cson.tmp', 'fileInput.cson')

要记住的一些事项:

  1. 我无法直接按编号编辑文件行,所以它创建了一个辅助tmp文件,它是原始文件的结果加上它所做的更改,当它完成时它会替换原来的文件,所以文件权限是值得记住的。
  2. 它遍历原始文件中的所有行,因此如果文件太大,可能会影响性能或执行时间。
  3. 正如问题中所提到的,空格在CSON中非常重要,因为它们在Python中,因此检查要替换它们的空格是否与原始空格相匹配至关重要
  4. 如果你能想到对这个有更好的解决方案/改进,请告诉我:)我都是耳朵(或许是眼睛)

    现金:

相关问题