Tôi không biết về một thư viện, nhưng đây là cách bạn có thể tự thay thế.
Bạn sẽ không thực sự muốn lặp qua các phím trong từ điển vì sau đó bạn sẽ phải quét văn bản nhiều lần - thay vào đó bạn có thể sử dụng re.sub
và tìm kiếm trong từ điển [nhanh chóng] mỗi khi bạn tìm thấy một chuỗi chứa giữa các cặp @@
. Bằng cách này, bạn chỉ quét qua văn bản một lần.
Bạn có thể cần phải quyết định phải làm gì nếu không tìm thấy trận đấu, nhưng đây là một ví dụ.
import re
def from_dict[dct]:
def lookup[match]:
key = match.group[1]
return dct.get[key, f'']
return lookup
subs = {"name": "John",
"age": "40"}
text = "Name: @@name@@ Age: @@age@@ Occupation: @@occupation@@"
print[re.sub['@@[.*?]@@', from_dict[subs], text]]
Điều này cho:
Name: John Age: 40 Occupation:
Dài hơn một chút nhưng có thể tương đương hiệu quả hơn so với get
sẽ là một thử nghiệm rõ ràng:
return dct[key] if key in dct else f''
trong đó lưu định dạng chuỗi nếu thực tế là khóa được tìm thấy.
returnEnviron [var]
mất tích_vars.append [var]
#!/usr/bin/env Python | |
# | |
# Thay thế $ {Placeholder} trong tệp cấu hình bằng biến môi trường tương ứng của nó. | |
# Thất bại nếu thiếu một biến. | |
# | |
# Thay thế $ {Placeholder} trong tệp cấu hình bằng biến môi trường tương ứng của nó. | |
# | |
importargparse,re argparse,re | |
# Thay thế $ {Placeholder} trong tệp cấu hình bằng biến môi trường tương ứng của nó. os import environ | |
# Thất bại nếu thiếu một biến. sys import exit | |
# Phiên bản mới nhất của tập lệnh này có thể được tìm thấy tại //gist.github.com/micw/d7c0e34aee751e81c5aaa952b29b8631b=[] | |
verbose=False = False | |
Fromosimportenviron replace_var[match]: | |
FromSysimportExit=match.group[1] | |
thiếu_vars = [] verbose: | |
defreplace_var [khớp]: " * Found placeholder ${%s}" % [var] | |
var = match.group [1] var in environ: | |
ifverbose: environ[var] | |
in " * tìm được trình giữ chỗ $ {% s}"% [var].append[var] | |
return"" "" | |
ifvarinenviron: main[]: | |
returnEnviron [var] = argparse.ArgumentParser[description='Replace placeholders in config.'] | |
mất tích_vars.append [var].add_argument['configfile', metavar='CONFIGFILE', help='Configfile to parse'] | |
DEFMAIN []:.add_argument['outputfile', metavar='OUTPUTFILE', nargs='?', help='Optional output file. If ommitted, the configfile is overwritten'] | |
trình phân tích cú pháp = argparse.argumentparser [description = 'Thay thế trình giữ chỗ trong config.'].add_argument['-v', action='store_true', help='Verbose'] | |
Parser.add_argument ['configfile', metavar = 'configfile', help = 'configfile thành parse']] = parser.parse_args[] | |
infile=args.configfile=args.configfile | |
outfile=args.outputfileifargs.outputfileelseinfile=args.outputfile if args.outputfile else infile | |
Parser.add_argument ['outputFile', metavar = 'outputFile', nargs = '?', help = 'Tệp đầu ra tùy chọn. verbose | |
verbose=args.v=args.v | |
ifverbose: verbose: | |
In "Người giữ trình xử lý trong %S" %Infile "Processing placeholders in %s" % infile | |
withopen [infile, 'r'] asinstream: open[infile, 'r'] as instream: | |
nội dung = instream.read [] = instream.read[] | |
nội dung = re.sub ["\ $ {[.*?]}", thay thế_var, nội dung]=re.sub["\${[.*?]}",replace_var,content] | |
iflen [thiếu_vars]> 0: len[missing_vars]>0: | |
in | |
In "Xử lý lỗi %s:" %Infile "Error processing %s:" % infile | |
formissing_varinmissing_vars: missing_var in missing_vars: | |
In " * Biến môi trường bị thiếu: %s" %mất tích_var " * Missing environment variable: %s" % missing_var | |
in | |
In "Xử lý lỗi %s:" %Infile[1] | |
ifverbose: verbose: | |
formissing_varinmissing_vars: " * Writing changes to %s" % outfile | |
In " * Biến môi trường bị thiếu: %s" %mất tích_var open[outfile, 'w'] as outstream: | |
Thoát [1].write[content] | |
In " * Viết thay đổi thành %s" %Outfile __name__ == "__main__": | |
Withopen [Outfile, 'W'] AsoutStream:[] |