2017-06-12 58 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) 

但現在我已經在目錄中的多個文本文件。我想打開每一個,然後從parse_messages函數調用。這是我到目前爲止所嘗試的。

但這個只讀最後一個文本文件,不是所有的人

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
在讀取文件循環 for file in hl7_file

的,你是在每次迭代覆蓋hl7只留在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函數,它應該返回你期望的結果,不管它是字符串還是列表結尾,看起來像你在運行'df.append(parse_messages)'而不是'df.append(parse_messages(hl7))'該錯誤 – Skycc

+0

它的工作,而不是複製我打字,我想我沒有輸入所有:) – 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))