0

私はPythonまたはプログラミングの完全な初心者です。

CSVに解析するテキストファイルがあります。現在、テキストファイルの例を提供することはできません。

  1. テキストは数行(千行)で、キャリッジリターンはありません。
  2. ファイルには4種類のレコード(A、B、C、またはI)があります。
  3. 各レコードタイプには、データ要素のサイズに基づいた特定の形式があります。
  4. 区切り文字はありません。
  5. レコードタイプの最後のデータ要素の直後に、次のレコードタイプが表示されます。
  6. 私はこれがPythonでどのように見えるかを別の言語から翻訳しようとしています。

これが私が書いたものの例です(正しいフォーマットではありません)

file=open('TestPython.txt'), 'r' # from current working directory
dataString=file.read()
data=()
i=0
while i < len(dataString):
i = i+2
    curChar = dataString(i)
    # Need some help on the next line var curChar = dataString[i]

    if curChar = "A"
        NPI = dataString(i+1, 16) # Need to verify that is how it is done in python inside ()
            NPI.strip()
        PCN = datastring(i+17, 40)
            PCN.strip()
        seqNo = dataString(i+41, 42)
            seqNo.strip()
        MRN = dataString(i+43, 66)
            MRN.strip()
    if curChar = "B"
        NPI = dataString(i+1, 16) # Need to verify that is how it is done in python inside ()
            NPI.strip()
        PCN = datastring(i+17, 40)
            PCN.strip()
        seqNo = dataString(i+41, 42)
            seqNo.strip()
        RC1 = (i+43, 46)
            RC1.strip()
        RC2 = (i+47, 50)
            RC2.strip() 
        RC3 = (i+51, 54)
            RC3.strip()
    if curChar = "C"
        NPI = dataString(i+1, 16) # Need to verify that is how it is done in python inside ()
            NPI.strip()
        PCN = datastring(i+17, 40)
            PCN.strip()
        seqNo = dataString(i+41, 42)
            seqNo.strip()
        DXVer = (i=43, 43)
            DXVer.strip()
        AdmitDX = (i+44, 50)
            AdmitDX.strip()
        RVisit1 = (i+51, 57)
            RVisit1.strip()

これは、テキストファイルの一部の要約バージョンです。

A 63489564696474677 9845687 777 67834717467764674 TUANU TINBUNIU 47 ERTYNU TDFGH UU748897764 66762589668777486U6764467467774767 7123609989 9 O
B 79466945684634677 676756787344786474634890 7746.66 7 96 4 7 7 9 7 774666 44969 494 7994
B 098765477 64697666966667 9 99 87966 47798 797499
C 63489564696474677 6747494 7494 7497 4964 4976 N7469 4769 N9784 9677
I 79466944696474677 677769U6 8888 67764674
A 79466945684634677 6767994 777 696789989 6464467464764674 UIIUN UITTI 7747 NUU 9 ATU 4 UANU OSASDF NU67479 66567896667697487U6464467476777967 7699969978 7699969978 9 O

ご覧のとおり、ファイルには各タイプがいくつか存在する可能性があります。この例の貼り付け方法では、タイプが行の最初の文字であるように見えます。これは実際のファイルには当てはまりません(私はこのサンプルをWordで作成しました)。

4

2 に答える 2

2

pyparsingをご覧ください。

于 2013-01-24T16:35:47.917 に答える
0

ファイルを読みながら処理する方がよいでしょう。

最初に、file.read(1)次のレコードのタイプを決定するために a を実行します。

次に、タイプに応じて、フィールドを読み取ります。正しく理解できれば、固定幅です。したがって、タイプ「A」の場合、これは次のようになります。

def processA (file):
    NPI = file.read(16).strip()  #assuming the NPI is 16 bytes long 
    PCN = file.read(23).strip()  #assuming the PCN is 23 bytes long
    seqNo = file.read(1).strip() #assuming seqNo is 1 byte long
    MRN = file.read(23).strip()  #assuming MRN is 23 bytes long
    return {"NPI":NPI,"PCN":PCN, "seqNo":seqNo, "MRN":MRN}

ファイルが ASCII でない場合は、正しいエンコーディングを取得し、バイトではなく文字を読み取るためにもう少し作業が必要です。

于 2013-01-24T16:35:41.097 に答える