如何更改YAML文件中的行?

时间:2019-06-19 21:59:56

标签: python yaml

我有一堆YAML文件,每个文件都有一行需要更改的代码。我正在尝试使用Python自动化它,最好的方法是什么?

现在,我有了文件列表,我计划打开每个文件并找到需要更改的行,然后替换它。

这可能吗?我似乎不知道如何替换该行。我知道确切的行号,对您有帮助吗?

2 个答案:

答案 0 :(得分:1)

因为您知道确切的行号,所以这很容易-如果您确切知道需要用什么文件替换它,则文件是否为YAML也无关紧要。

我在这里假设所有需要更改其行的文件都在同一目录中,没有其他YAML文件。如果不是这种情况,那么该程序当然需要进行微调。

import os
line_number = 47  # Whatever the line number you're trying to replace is
replacement_line = "Whatever string you're replacing this line with"

items = os.listdir(".")  # Gets all the files & directories in the folder containing the script

for file_name in items:  # For each of these files and directories,
    if file_name.lower().endswith(".yaml"):  # check if the file is a YAML. If it is:
        with open(file_name, "w") as file:  # Safely open the file
            data = file.read()  # Read its contents
            data[line_number] = replacement_line  # Replace the line
            file.write(data)  # And save the file

请注意,如果文件是.yml而不是.yaml,则必须在代码中进行更改。另外,如果您的文件太大,则可能会导致每个文件加载到内存时出现问题。

如果这对您不起作用,那么互联网上还有其他解决方案,包括堆栈溢出!

答案 1 :(得分:0)

我使用pyyaml库(pip install pyyaml):

它处理完整的YAML语法,如下例所示:

  • python example
import yaml

with open("data.yaml", "w+") as FILE:
    data = yaml.load(FILE)
    data.pop("token_default")
    yaml.dump(data)


  • data.yaml
token_default: &token
  token      : !!str
  type       : # var, field, list, vector
  version    : 0.1
  namespace  : cam_tokens
  properties :
    unit   : !!seq [0, 0, 0, 0, 0, 0]
    min    : !!float +inf
    max    : !!float -inf
    argPos : !!int -1
  required   :
    - unit
    - argPos

mass:
  <<: *token
  token: mass
  namespace  : cam_tokens
  properties :
    unit   : !!seq [1, 0, 0, 0, 0, 0]
  required   :
    - unit
    - argPos