poikilos
6 years ago
committed by
Jacob Gustafson
2 changed files with 113 additions and 0 deletions
|
@ -0,0 +1,103 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
import os |
||||
|
import csv |
||||
|
import sys |
||||
|
|
||||
|
mtdeltas_csv = "mtoldtonew.csv" |
||||
|
if not os.path.isfile(mtdeltas_csv): |
||||
|
print("ERROR: missing " + mtdeltas_csv) |
||||
|
#exit(1) |
||||
|
|
||||
|
files = [] |
||||
|
|
||||
|
usageStr = ''' |
||||
|
Usage: |
||||
|
python3 mtoldtonew.py <filename> |
||||
|
or |
||||
|
python3 mtoldtonew.py <filenames> |
||||
|
|
||||
|
Examples: |
||||
|
python3 mtoldtonew.py palm_oldnodes.we |
||||
|
python3 mtoldtonew.py palm_oldnodes.we palm.we |
||||
|
|
||||
|
* Example 2 yields: palm_newnodes.we and newpalm.we |
||||
|
with all nodes replaced according to csv. |
||||
|
(adds "new" to beginning if "old" is not in specified filename) |
||||
|
|
||||
|
* only replaces node names surrounded by quotes |
||||
|
- you can change that behavior using python: |
||||
|
from mtoldtonew import oldToNew |
||||
|
oldToNew('file.we', quotechar='') |
||||
|
|
||||
|
''' |
||||
|
usageStr += "edit '%s' as needed (old name in column 1, new name in 2)" |
||||
|
|
||||
|
def usage(): |
||||
|
print(usageStr) |
||||
|
|
||||
|
mtdeltas = {} |
||||
|
|
||||
|
def stripQuotes(s, quotechar='"'): |
||||
|
if (len(s) >= 2) and (s[0] == quotechar) and (s[-1] == quotechar): |
||||
|
s = s[1:-1] |
||||
|
return s |
||||
|
|
||||
|
def quoted(str1, quotechar='"'): |
||||
|
return(quotechar + str1 + quotechar) |
||||
|
|
||||
|
def replaceQuoted(str1, deltas, quotechar='"'): |
||||
|
ret = str1 |
||||
|
for k, v in deltas.items(): |
||||
|
ret = ret.replace(quoted(k, quotechar), quoted(v, quotechar)) |
||||
|
return ret |
||||
|
|
||||
|
with open(mtdeltas_csv) as csvfile: |
||||
|
ins = csv.reader(csvfile, delimiter=',', quotechar='"') |
||||
|
lineI = 0 |
||||
|
for row in ins: |
||||
|
lineI += 1 |
||||
|
if (len(row) < 2): |
||||
|
continue |
||||
|
oldStr = stripQuotes(row[0].strip()) |
||||
|
newStr = stripQuotes(row[1].strip()) |
||||
|
# csv doesn't strip quotes if a space is before an opening quote |
||||
|
# print("'%s', '%s'" % (oldStr, newStr)) |
||||
|
if len(oldStr) > 0: |
||||
|
if len(newStr) > 0: |
||||
|
mtdeltas[oldStr] = newStr |
||||
|
else: |
||||
|
print("Skipped empty destination for '" + oldStr |
||||
|
+ " on line " + str(lineI) + " in " + csvfile) |
||||
|
|
||||
|
def oldToNew(path, quotechar='"'): |
||||
|
newName = path.replace("old", "new") |
||||
|
if newName == path: |
||||
|
newName = "new" + newName |
||||
|
if os.path.exists(newName): |
||||
|
print("WARNING: Overwriting '%s'..." % newName) |
||||
|
with open(path, 'r') as ins: |
||||
|
with open(newName, 'w') as outs: |
||||
|
oldLine = True |
||||
|
while oldLine: |
||||
|
oldLine = ins.readline() |
||||
|
if oldLine: |
||||
|
outs.write(replaceQuoted(oldLine, mtdeltas) + "\n") |
||||
|
print("* wrote '%s'" % newName) |
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
for i in range(1, len(sys.argv)): |
||||
|
try_path = sys.argv[i] |
||||
|
if os.path.isfile(try_path): |
||||
|
files.append(try_path) |
||||
|
else: |
||||
|
print("MISSING file: '" + try_path + "'") |
||||
|
|
||||
|
if len(files) < 1: |
||||
|
usage() |
||||
|
print("") |
||||
|
print("You must specify a plain-text schem such as a\n" |
||||
|
".we file, or any file containing double-quoted node names.") |
||||
|
|
||||
|
for oldName in files: |
||||
|
print("Processing %s..." % oldName) |
||||
|
oldToNew(oldName) |
Loading…
Reference in new issue