2016-07-29 8 views
9

私は書く必要のあるPHP定型文を自動化する小さなスクリプトを書こうとしています。文字列codeのコピーを、出力ファイルに書き込んで、fieldsリストの各dictのさまざまな置換フィールドに書き込む必要があります。文字列書式設定時にフィールド名に '{'があります

しかし、私はエラーを取得しています:

Traceback (most recent call last): 
    File "writefields.py", line 43, in <module> 
     formatted = code.format(**field) 
ValueError: unexpected '{' in field name 

は、私の知る限り、交換用のフィールドや問題を引き起こしている必要がありますdictsのいずれかで余分な括弧が存在しないので、任意の助けを希望感謝する。

code = ''' 
// {label} 
add_filter('submit_job_form_fields', 'frontend_add_{fieldname}_field'); 
function frontend_add_{fieldname}_field($fields) { 
    $fields['job']['job_{fieldname}'] = array(
     'label' => __('{label}', 'job_manager'), 
     'type' => 'text', 
     'required' => {required}, 
     'priority' => 7, 
     'placeholder' => '{placeholder}' 
    ); 
    return $fields; 
} 
add_filter('job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field'); 
function admin_add_{fieldname}_field($fields) { 
    $fields['_job_{fieldname}'] = array(
    'label'  => __('{label}', 'job_manager'), 
    'type'  => 'text', 
    'placeholder' => '{placeholder}', 
    'description' => '' 
); 
    return $fields; 
} 
''' 

fields = [ 
    { 
     'fieldname': 'salary', 
     'label': 'Salary ($)', 
     'required': 'true', 
     'placeholder': 'e.g. 20000', 
    }, 
    { 
     'fieldname': 'test', 
     'label': 'Test Field', 
     'required': 'true', 
     'placeholder': '', 
    } 
] 

with open('field-out.txt', 'w') as f: 
    for field in fields: 
     formatted = code.format(**field) 
     f.write(formatted) 
     f.write('\n') 

答えて

14

あなたは、書式設定のプレースホルダの一部ではないダブル任意の{または}する必要があります。たとえば、次のようになります。

function admin_add_{fieldname}_field($fields) { 
    [....] 
} 

文字列です。 {}はプレースホルダの一部ではありません。

これらの中括弧を倍にするとエスケープされます。最終出力には、{}の文字が再度含まれます。

code = ''' 
// {label} 
add_filter('submit_job_form_fields', 'frontend_add_{fieldname}_field'); 
function frontend_add_{fieldname}_field($fields) {{ 
    $fields['job']['job_{fieldname}'] = array(
     'label' => __('{label}', 'job_manager'), 
     'type' => 'text', 
     'required' => {required}, 
     'priority' => 7, 
     'placeholder' => '{placeholder}' 
    ); 
    return $fields; 
}} 
add_filter('job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field'); 
function admin_add_{fieldname}_field($fields) {{ 
    $fields['_job_{fieldname}'] = array(
    'label'  => __('{label}', 'job_manager'), 
    'type'  => 'text', 
    'placeholder' => '{placeholder}', 
    'description' => '' 
); 
    return $fields; 
}} 
''' 
関連する問題