Yine de string / app_name'i çeşit başına nasıl farklı yapabilirim?
Bir güncelleme yazmak istedim, ancak kaynağa yama uygulayan bir Python betiği kullandığımı söyleyen orijinal cevaptan daha büyük olduğunu fark ettim.
Python betiğinin bir parametresi, bir dizin adı vardır. Bu dizin her çeşide özgü varlıkları, başlatıcı simgeleri gibi kaynakları ve bir Python sözlüğü içeren properties.txt dosyasını içerir.
{ 'someBoolean' : True
, 'someParam' : 'none'
, 'appTitle' : '@string/x_app_name_xyz'
}
Python komut yükleri o dosyadan sözlüğü arasındaki değer değiştirir <string name="app_name">
ve </string>
değeri ile properties['appTitle']
.
Aşağıdaki kod olduğu gibi / olduğu gibi sağlanmıştır.
for strings_xml in glob.glob("res/values*/strings.xml"):
fileReplace(strings_xml,'<string name="app_name">',properties['appTitle'],'</string>',oldtextpattern=r"[a-zA-Z0-9_/@\- ]+")
bir veya daha fazla bu dosyadan özellikleri okumak için:
with open(filename1) as f:
properties = eval(f.read())
with open(filename2) as f:
properties.update(eval(f.read()))
ve fileReplace işlevi:
really = True
def fileReplace(fname,before,newtext,after,oldtextpattern=r"[\w.]+",mandatory=True):
with open(fname, 'r+') as f:
read_data = f.read()
pattern = r"("+re.escape(before)+r")"+oldtextpattern+"("+re.escape(after)+r")"
replacement = r"\g<1>"+newtext+r"\g<2>"
new_data,replacements_made = re.subn(pattern,replacement,read_data,flags=re.MULTILINE)
if replacements_made and really:
f.seek(0)
f.truncate()
f.write(new_data)
if verbose:
print "patching ",fname," (",replacements_made," occurrence" + ("s" if 1!=replacements_made else ""),")",newtext,("-- no changes" if new_data==read_data else "-- ***CHANGED***")
elif replacements_made:
print fname,":"
print new_data
elif mandatory:
raise Exception("cannot patch the file: "+fname+" with ["+newtext+"] instead of '"+before+"{"+oldtextpattern+"}"+after+"'")
Komut dosyasının ilk satırları:
#!/usr/bin/python
# coding: utf-8
import sys
import os
import re
import os.path
import shutil
import argparse
import string
import glob
from myutils import copytreeover