我有一堆YAML文件,每个文件都有一行需要更改的代码。我正在尝试使用Python自动化它,最好的方法是什么?
现在,我有了文件列表,我计划打开每个文件并找到需要更改的行,然后替换它。
这可能吗?我似乎不知道如何替换该行。我知道确切的行号,对您有帮助吗?
答案 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