2009-08-07 15 views
0

私は比較的大きい(30行の)行のテキストブロックを扱っています。以下はその抜粋です:大文字の文字をPythonに置き換える最適な方法は?

PID | 1 | |^MR || PATIENT^FAKE R ||| F

PV1 1 || 06225401 ^^^ PA0私は025631^DoctorZを||||| ^^^^^^^ PA0 ^^^^ DRH | DRH |||| ...

ORC | RE || CYT-09から06645^AP |||||| 200912110333 | INTERFACE07

OBR | 1 || CYT09-06645 | 8104 ^^ ||| L 20090602 ||||||| 200906030000 [conditio ...

OBX | 1 | TX | 8104 | 1 | SソースPECIMEN:[ソース] |||||| F ||| 200912110333 | CYT ...

私は現在、不正な文字や用語を取り出し、スクリプトを持っています。ここに例があります。

infile = open(thisFile,'r') 
    m = infile.read() 

    #remove junk headers 
    m = m.replace("4þPATHþ", "") 
    m = m.replace("10þALLþ", "") 

私の目標は、フィールドの1つの最後に4桁を追加できるようにこのスクリプトを変更することです。具体的には、OBR行の日付フィールド( "20090602")。完成したスクリプトは、この同じ形式に従うファイルであればどんなファイルでも動作します。これは私が現在ファイル入力を処理している方法で可能ですか、あるいは別のロジックを使用する必要がありますか?

+0

質問は完全にはっきりしていません。サンプルの入力と出力を提供できますか? –

+1

これらのジャンクヘッダは、例えば、 "4 \ xfePATH \ xfe"と呼ばれ、いわゆる "違法な文字"は文字ではありません(アイスランド語の小文字の棘もラテン文字の小文字のpもありません)。ごみ。 –

答えて

2

ここで、アウトライン(未テスト)があります...基本的にあなたがそれを行を行う際に

for line in infile: 
    data = line.rstrip("\n").split("|") 
    kind = data[0] 
    # start of changes 
    if kind == "OBR": 
     data[7] += "0000" # check that 7 is correct! 
    # end of changes 
    outrecord = "|".join(data) 
    outfile.write(outrecord + "\n") 

上記(あなたがライン型でフィックスアップのターゲットを選択していることを前提としてい例:「OBR」)と列インデックス(例:7)。そのようなターゲットがほんのわずかな場合は、より類似した修正ステートメントを追加してください。あなたは[そのデータをチェックするためのコードを追加するためにどのような場合には好きなこと

if kind in fix_targets: 
    for col_index in fix_targets[kind]: 
     data[col_index] += "0000" 

:多数のターゲットがある場合は、このようにそれらを指定することができます。

fix_targets = { 
    "OBR": [7], 
    "XYZ": [1, 42], 
    } 

とfix_upコードは次のようになります。 col_index]は実際にはYYYYMMDD形式の日付です。

サンプルデータを表示していないため、不要なヘッダーが削除される上記のアドレスはありません。私はだと思います。は、各行に置換えを適用する(そして、置換後に空白のみになった場合に行を書くことを避ける)ことは、そのトリックを行います。

+0

パーフェクト。私はそれがこのようなものかもしれないと思ったが、私はそれを実際に視覚化できなかった。答えをありがとう。 – Sean

+1

良いoutfile。write(outrecord + '\ n')には、Pythonの同等の組み込み関数があります:print >> outfile、outrecord、これは簡単です。 – EOL

+1

@EOL - しばしば使われていない "print chevron"構文も推奨されていません。 – JimB

関連する問題