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

2024-05-23 22:52:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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中按行号编辑特定的行号。你知道吗

(顺便说一句,我确实知道^{} library,但除了单行^{}之外,我还不能让它输出任何东西,我更愿意将它保存在CSON中,因为我希望在一个长文件中保持可读性,并且不想弄乱用户的原始文件。)


Tags: and文件keyjsonvaluemainonsome
1条回答
网友
1楼 · 发布于 2024-05-23 22:52:33

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

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

如果您能想出任何更好的解决方案/改进方案,请告诉我:)我洗耳恭听(也许是眼睛)


学分:

相关问题 更多 >