У меня возникли проблемы с вставкой текста с использованием Python. У меня есть файл, Package.swift
со следующим:
targets: [
.target(
name: "LibCore",
path: "lib/core/"
),
.target(
name: "LibAppData",
dependencies: ["LibCore"],
path: "lib/appdata/",
swiftSettings: [.define("appdata")]
),
Я хочу вставить новый .target()
прямо под отверстием targets: [
Это работает с использованием awk
в zsh:
awk '{print} /\.target\(/ && !n {print " name: \"{full_name}\",\n dependencies: \[\"LibCore\"\],\n path: \"lib\/{short_name}\/\",\n swiftSettings: [.define(\"{short_name}\")]\n ),\n .target("; n++}' Package.swift > Package-new.swift && mv Package-new.swift Package.swift
Я попробовал следующее в Python:
subprocess.call([f"awk '{print} /\\.target\\(/ && !n {{print " name: "{full_name}\",\n dependencies: \\[\"LibCore\"\\],\n path: \"lib\\/{short_name}\\/\",\n swiftSettings: [.define(\"{short_name}\")]\n ),\n .target("; n++ "}}' Package.swift > Package-new.swift && mv Package-new.swift Package.swift"], shell=True)
subprocess.call(['awk.exe', '{print} /\\.target\\(/ && !n {print " name: \"{full_name}\",\n dependencies: \\[\"LibCore\"\\],\n path: \"lib\\/{short_name}\\/\",\n swiftSettings: [.define(\"{short_name}\")]\n ),\n .target("; n++}', 'Package.swift'])
tmp=tempfile.mkstemp()
with open("Package.swift") as fd1, open(tmp[1],'w') as fd2:
for line in fd1:
line = line.replace("\\.target\\(",f" name: \"{full_name}\",\n dependencies: \\[\"LibCore\"\\],\n path: \"lib\\/{short_name}\\/\",\n swiftSettings: [.define(\"{short_name}\")]\n ),\n .target(")
fd2.write(line)
os.rename(tmp[1],"Package.swift")
newtext = '''\
name: "{full_name}\",\n dependencies: \\[\"LibCore\"\\],\n path: \"lib\\/{short_name}\\/\",\n swiftSettings: [.define(\"{short_name}\")]\n ),\n .target(
'''
filename = 'Package.swift'
for line in fileinput.input([filename], inplace=True, backup='.bak'):
if re.match(r'\\.target\\(', line):
sys.stdout.write(newtext.format(l=line))
else:
sys.stdout.write(line)
Я также пробовал много вариантов этих попыток сбежать {}, но все равно каждый раз, когда я пытаюсь и получаю SyntaxError: invalid syntax
запустить скрипт Если это не очевидно, Python не мой родной язык ?
Кто-нибудь знает, что мне не хватает?
Спасибо!