繁体   English   中英

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

[英]Find a string in a file and replace the next lines

我有一个CSON (咖啡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的性质, CSON缩进敏感。

我曾考虑过要从specialKey获取行号并替换下两个行号,但是对于我来说,我一直无法找到一种在Python中按数字编辑特定行的方法。

(作为一个旁注,我pycson了解pycson库,但是除了单行JSON ,我无法让它输出其他任何内容,我希望将其保存在CSON中,因为我想长期保持可读性文件,并且不想弄乱用户的原始文件。)

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

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中非常重要, CSON在Python中一样,因此,至关重要的是要检查您要替换的空格是否与CSON空格匹配

如果您能想到对此更好的解决方案/改进,请让我知道:)我全是耳朵(或眼睛)


学分:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM