0

したがって、プログラムには次のような一連のコード行が並んでいます。

str = str.replace('ten', '10s')
str = str.replace('twy', '20s')
str = str.replave('fy', '40s')
...

新しいケースを追加するためにソース ファイルを手動で開く必要がないようにしたいと考えています。例: ('sy', '70')。これらすべてをどうにかして関数に入れなければならないことはわかっていますが、コマンドラインから「マッパーライブラリ」にないケースをマップしたいと思います。おそらく設定ファイル?どうやって?

ありがとう!

4

4 に答える 4

4

次のようなjson形式の構成ファイルを使用できます。

[
    ["ten", "10s"],
    ["twy", "20s"],
    ["fy", "40s"]
]

「replacements.json」として保存し、次のように使用します。

import json

with open('replacements.json') as i:
    replacements = json.load(i)

text = 'ten, twy, fy'
for r in replacements:
    text = text.replace(r[0], r[1])

次に、値を変更する必要がある場合は、Python コードに触れることなく、replacements.json ファイルを編集するだけです。

置換ファイルの形式は何でもかまいませんが、json は使いやすく編集しやすいものです。

于 2012-10-09T22:59:10.567 に答える
0

csv を使用して、人間が編集可能な形式で置換をファイルに保存できます。

import csv

with open('replacements.csv', 'rb') as f:
     replacements = list(csv.reader(f))

for old, new in replacements:
    your_string = your_string.replace(old, new)

ここでreplacements.csv:

ten,10s
twy,20s
fy,40s

"json 形式の,などの不要なマークアップを回避し、@WoLpH の answerのプレーン テキスト形式とは異なり、[]区切り文字 ( ) を文字列自体に含めることができます。,

(実例)

于 2012-10-09T23:38:46.553 に答える
0

簡単な解決策は、それらをファイルに入れ、プログラムでそれらを読み取り、ループで置換を行うことです..

于 2012-10-09T22:50:48.767 に答える
0

これを行うには多くの方法がありますが、めったに変更されない場合は、Python dict を使用して行うことを検討できます。

mappings = {
  'ten': '10s',
  'twy': '20s',
  'fy': '40s',
}

def replace(str_):
  for s, r in mappings.iteritems():
    str_.replace(s, r)
  return str_

または、テキスト ファイル (どのキーでも使用されていない安全な区切り文字を使用するようにしてください!)

mappings.txt

ten|10s
twy|20s
fy|40s

そしてPythonの部分:

mappings = {}
for line in open('mappings.txt'):
    k, v = line.split('|', 1)
    mappings[k] = v

そして、上記の置換を使用してください:)

于 2012-10-09T22:51:30.663 に答える