2017-06-12 2 views
0

コードの下の関数を呼び出すことがparse_messagesがパラメータとしてを開き、複数のテキストファイルと

def parse_messages(hl7): 
    hl7_msgs = hl7.split("MSH|") 
    hl7_msgs = ["{}{}".format("MSH|", x) for x in hl7_msgs if x] 
    for hl7_msg in hl7_msgs: 
     #does something.. 

with open('sample.txt', 'r') as f: 
    hl7 = f.read() 
df = parse_messages(hl7) 

を取得します。しかし、今、私は、ディレクトリ内に複数のテキストファイルを持っている1つのテキストファイルと機能を開きところ、完璧に動作します。私はそれぞれparse_messagesの機能から呼び出して開いてみたいです。これまで私が試したことがあります。

しかし、これだけ読んで最後のテキストファイル、あなたの読み取りファイルのループfor file in hl7_fileではないすべてのそれらの

import glob 
data_directory = "C:/Users/.../" 
hl7_file = glob.glob(data_directory + '*.txt') 

for file in hl7_file: 
    with open(file, 'r') as hl7: 
    hl7 = f.read() 
df = parse_messages(hl7) 
+1

インデントをあなたのコードを何をしたいのか理解している場合、これは動作するはずです。いくつかの場所では構文エラーがあり、他の場所では意味がありません。 Pythonはスペースに敏感です –

+0

ファイルからのあなたの 'hl7'読み出しはすべての反復で上書きされ、最後に読み込まれたファイルだけが残っています。リストや文字列に追加したいかもしれません。 – Skycc

+0

@MadPhysicistそれはコピー貼り付けからだった – mtkilic

答えて

1

は、あなたはおそらくhl7 でたくCONCATENATEを唯一の最後の読み取り店を出るすべての反復でhl7上書きされています一緒にすべてのファイルの内容

hl7 = '' 
for file in hl7_file: 
    with open(file, 'r') as f: 
     hl7 += f.read() 

df = parse_messages(hl7) # process all concatenate contents together 

か、以下のようにDFリストストア結果をループ内parse_messages関数を呼び出すことができます

df = [] 
for file in hl7_file: 
    with open(file, 'r') as f: 
     hl7 = f.read() 
     df.append(parse_messages(hl7)) 
# df[0] holds the result for 1st file read, df[1] for 2nd file and so on 
+0

この作品は完璧に感謝しています!私は実際に二番目の答えのようなものを探していた:)ありがとうたくさん! – mtkilic

+0

あなたのparse_messages関数をチェックすると、結果が返ってくるはずです。最終的にstringかlistであると、df.append(parse_messages(hl7))の代わりに 'df.append(parse_messages)'を実行しているようですそのエラー – Skycc

+0

私は入力していたコピーの代わりに、それは働いて、私はそれのすべてのタイプdidntを推測する:) – mtkilic

0

私はあなたが適切

import os 

all = [] 
files = [x for x in os.listdir() if x.endswith(".txt")] 
for x in files: 
    with open(x, encoding='utf-8','r') as fileobj: 
     content = fileobj.read() 
     all.append(parse_message(content)) 
関連する問題