如何使用 Python 将一组文本插入文件的特定行号

How to insert a set of text to a particular line number of a file using Python

我正在尝试编写一个 python 程序,它可以输入一组字典格式的文本以及行号。我需要将这组文本添加到 .yaml 文件的特定行号。

我有一个 Kubernetes deployment.yaml 文件,我需要我的 Python 程序将字典中的文本添加到特定的行号(第 29 行,在 cpu:deployment.yaml 文件中的“500m”volumeMounts:)。

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
      volumeMounts:
      - name: ephemeral
        mountPath: "/tmp"
  volumes:
    - name: ephemeral
      emptyDir: {}

test.py

yaml_change={
  "change": '''
      tolerations:
      - key: "example-key"
        operator: "Exists"
        effect: "NoSchedule"
  '''
}

line_number = 29
yaml_modification = yaml_change['change']

with open('values.yaml', 'r') as FileRead:
    yaml_data = FileRead.readlines()
    yaml_data = yaml_data[line_number-2]+yaml_modification
    print(yaml_data)

with open('values.yaml', 'w') as FileWrite:
    FileWrite.writelines(yaml_data)

当我 运行 python 文件时,字典中的文本文件被添加到 .yaml 文件中。但是,所有其他内容都丢失了。

之前

之后

有人知道如何完成这个要求吗?

尝试将行 yaml_data = yaml_data[line_number-2]+yaml_modification 更改为

yaml_data.insert(line_number - 1, yaml_modification)

yaml_data 是文件中所有行的列表。 list.insert(idx, obj) 函数在给定位置插入对象。

您的解决方案不起作用,因为您正在添加要添加的内容和之前的行 (yaml_data[line_number-2])。