首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文件中找到一个字符串并替换下一行

在文件中找到一个字符串并替换下一行
EN

Stack Overflow用户
提问于 2018-02-12 00:51:30
回答 1查看 84关注 0票数 1

我有一个CSON (Coffeescript )文件,看起来如下所示:

代码语言:javascript
复制
'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中获取行号,并替换下两个行号,但在我的一生中,我一直无法找到一种方法来编辑一个特定的行号。

(顺便提一句,我确实知道 library ,但是除了单行 JSON之外,我还无法让它输出任何其他东西,我宁愿把它保存在CSON中,因为我想要在一个长文件中保持可读性,并且不想搅乱用户的原始文件)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 01:48:43

好吧,我又一次回答了我自己的问题。它可能不是最有效率或最优雅的,但在这里:

代码语言:javascript
复制
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中非常重要,因此,检查您要用原始空格替换它们是否与原始空间匹配是至关重要的。

如果你能想出更好的解决方案/改进办法,请告诉我:)我全是耳朵(也许是眼睛)

演职人员:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48738131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档