2025年3月16日 星期日 甲辰(龙)年 月十五 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 修改yaml文件后,yaml文件中的注释消失。以及顺序重排,但内容正确的问题

时间:09-16来源:作者:点击数:48

该问题的原因就在于,yaml.dump()方法,是将新的格式内容重新生成yaml文件。(因为#注释掉了,所以load时就没包含#注释的内容),所以把内容重新生成时,未被#注释的内容没问题。但重新生成的新文件,不包含被注释的内容,且因为重新dump生成新文件。里面内容的顺序也会发生改变。如果希望只改变yaml文件里的内容,而不更改注释,可以使用一般的文件读取。通过ReadLine来实现。

这里引用别人现成的代码,一个是修改以“=”为配置特征的setting.properties的配置文件,以及以“:”为分隔的yaml配置文件兼容修改的方案。

  • import yaml
  • #######修改setting.properties类型的配置文件
  • @staticmethod
  • def changeProperties(path, key, value):
  • with open(path, 'r', encoding='utf-8') as f:
  • lines = [] # 创建了一个空列表,里面没有元素
  • for line in f.readlines():
  • if line != '\n':
  • lines.append(line)
  • f.close()
  • with open(path, 'w', encoding='utf-8') as f:
  • flag=0
  • for line in lines:
  • if key in line:
  • newline="{0}={1}".format(key, value)
  • line = newline
  • f.write('%s\n' % line)
  • flag=1
  • else:
  • f.write('%s' % line)
  • #####如果结尾没有仍然写入数据
  • if (flag == 0):
  • newline = "{0}={1}".format(key, value)
  • line = newline
  • f.write('%s\n' % line)
  • flag = 1
  • f.close()
  • ######修改yaml文件内容
  • @staticmethod
  • def changeYamlConfig(path, key, value):
  • with open(path, 'r', encoding='utf-8') as f:
  • lines = [] # 创建了一个空列表,里面没有元素
  • for line in f.readlines():
  • if line != '\n':
  • lines.append(line)
  • f.close()
  • with open(path, 'w', encoding='utf-8') as f:
  • flag = 0
  • for line in lines:
  • if key in line and '#' not in line:
  • leftstr=line.split(":")[0]
  • newline = "{0}: {1}".format(leftstr, value)
  • line = newline
  • f.write('%s\n' % line)
  • flag = 1
  • else:
  • f.write('%s' % line)
  • f.close()
  • return flag
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门