Python脚本更新文本中内容

需求:在Unity项目中自动编译出Unitypackage后写入最新的build号。
设计:Python脚本读取文本文件,找到需要更新的数字,然后替换为最新build号。
实现:Python中无法边读边写同一行内容。先生成一个A.bak,然后最后删除旧文件,重新命名为A。
代码:

import io, os, sys, re

# file: SDKVersion script file path
# new_version : New build number
def alter(file, new_str):
    with io.open(file, "r", encoding="utf-8") as f1, io.open("%s.bak" % file, "w", encoding="utf-8") as f2:
        for line in f1:
            if line.find('SDKBuildNumber') != -1:
                f2.write(re.sub(r'(\d+)',new_str,line))
            else:
                f2.write(line)
    os.remove(file)
    os.rename("%s.bak" % file, file)

def main():
    arg1 = sys.argv[1] # file path to version
    arg2 = sys.argv[2] # new build number
    alter(arg1, arg2)

if __name__ == '__main__':
    main()

 

写文章时的参考References:
1. python字符串替换之re.sub()
re.sub(pattern, repl, string, count=0, flags=0)
pattern可以是一个字符串也可以是一个正则,用于匹配要替换的字符,如果不写,字符串不做修改。\1 代表第一个分组
repl是将会被替换的值,repl可以是字符串也可以是一个方法。如果是一个字符串,反斜杠会被处理为逃逸字符,如\n会被替换为换行,等等。repl如果是一个function,每一个被匹配到的字段串执行替换函数。
\g 代表前面pattern里面第一个分组,可以简写为\1,\g代表前面pattern匹配到的所有字符串。
count是pattern被替换的最大次数,默认是0会替换所有。有时候可能只想替换一部分,可以用到count

示例:

a = re.sub(r‘hello‘, ‘i love the‘, ‘hello world‘)
print(a)
‘i love the world‘   #hello world里面的hello被 i love the替换

http://www.mamicode.com/info-detail-2327645.html

2. python修改文件内容的3种方法详解
一、修改原文件方式

def alter(file,old_str,new_str):
  """
  替换文件中的字符串
  :param file:文件名
  :param old_str:就字符串
  :param new_str:新字符串
  :return:
  """
  file_data = ""
  with open(file, "r", encoding="utf-8") as f:
    for line in f:
      if old_str in line:
        line = line.replace(old_str,new_str)
      file_data += line
  with open(file,"w",encoding="utf-8") as f:
    f.write(file_data)
 
alter("file1", "09876", "python")

 

二、把原文件内容和要修改的内容写到新文件中进行存储的方式
2.1 python字符串替换的方法,修改文件内容

import os
def alter(file,old_str,new_str):
  """
  将替换的字符串写到一个新的文件中,然后将原文件删除,新文件改为原来文件的名字
  :param file: 文件路径
  :param old_str: 需要替换的字符串
  :param new_str: 替换的字符串
  :return: None
  """
  with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
    for line in f1:
      if old_str in line:
        line = line.replace(old_str, new_str)
      f2.write(line)
  os.remove(file)
  os.rename("%s.bak" % file, file)
 
alter("file1", "python", "测试")

2.2 python 使用正则表达式 替换文件内容 re.sub 方法替换

import re,os
def alter(file,old_str,new_str):
 
  with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
    for line in f1:
      f2.write(re.sub(old_str,new_str,line))
  os.remove(file)
  os.rename("%s.bak" % file, file)
alter("file1", "admin", "password")

参考:https://www.jb51.net/article/174303.htm

打赏
Tags:

沪公网安备 31011302002866号