正規表現はこれには可能ですが残酷かもしれません。ここでsplit()
を使用したソリューションです:
DATA =\
"""2015-04-18 10 101011
2015-04-18 10 102000
2015-04-18 20 222222
2015-04-18 20 100000"""
def process_data(data):
substitutions = {'10':'1', '20':'2', '30':'3'}
for line in data.splitlines():
components = line.split()
components[1] = substitutions[components[1]]
yield ' '.join(components)
if __name__ == '__main__':
for line in process_data(DATA):
print(line)
出力
2015-04-18 1 101011
2015-04-18 1 102000
2015-04-18 2 222222
2015-04-18 2 100000
仮定
私は「あなたはあなたの質問から明らかにされていない細部の数がありますのでこの実装で行った前提をリストアップします:
- データの各行には少なくとも1つのスペースがあります(そうでない場合は
components[1]
はIndexError
を発生させます)。
- 最初のスペースに続くデータは、「10」または「20」のいずれかになり、その後に別のスペースが続きます。
- 各行のすべての空白の区切りは、の単一ののスペースです。
Otherwise ' '.join(components)
は、オリジナルとは異なる間隔の線を生成します。
入力(「10」と「20」)とそれらの置換(「1と2」)の関係については、想定されていません。この非常に小さなデータセットからはf(x) = x/10
のように見えますが、確かに分かります。必要に応じて、ユースケースに従って置換ロジックを調整できます。
以上のコードの開始よりも私たちをご提示ください。広すぎます。 –
正規表現を使用しますか?スペースを分割して2番目の値を確認しますか? 12番目と13番目の文字を確認しますか? *何か試しましたか?* – jonrsharpe
2番目の強調表示されたテキストは括弧で囲まれた10と20ですが、最初に強調表示されたテキストは表示されません。どちらですか?インデントが正しくないため、最後に強調表示されたテキストのコードは機能しません。あなたのテキストの置き換えはあなたのファイルのサイズを変更します:それはあなたが望むものですか?あなたはこれまでにこの問題について何を試しましたか?あなたの質問を改善してください。 –