2016-04-13 18 views
0

以下の私の関数では、複数の.txtファイルからフルテキストを返して、結果をリストに追加しようとしていますが、私の関数は自分のディレクトリの最初のファイルのテキストのみを返します。つまり、返品を返品する場合は、すべての結果を独自の行にコンソールに記録しますが、結果を一覧に追加することはできません。私は返品機能に何が間違っているのですか?おかげさまで 返信のみ最初の項目

import glob 
import copy 

file_paths = [] 
file_paths.extend(glob.glob("C:\Users\7812397\PycharmProjects\Sequence  diagrams\*")) 
matching_txt = [s for s in file_paths if ".txt" in s] 
full_text = [] 
def fulltext(): 
    for file in matching_txt: 
     f = open(file, "r") 
     ftext = f.read() 
     all_seqs = ftext.split("title ") 
     return all_seqs 
print fulltext() 
+0

あなたの関数にインデントを固定します(returnはinsideループです) – jmugz3

答えて

0

あなたのループの内側にreturnを配置しています。私はあなたがしたいと思う。しかし、あなたはここで値を得ることができます。

あなたはメモリ使用の観点から、より効率的である発電機にあなたの関数に変換することができます
for file in matching_txt: 
    f = open(file, "r") 
    .... 
    full_text.append(all_seqs) 
return full_text 
0

def fulltext(): 
    for file_name in matching_txt: 
     with open(file_name) as f: 
      ftext = f.read() 
      all_seqs = ftext.split("title ") 
      yield all_seqs 

その後、彼らは巨大でない場合は、リストに発電機を変換し、他の賢明なあなたがすることができ、単にあなたの関数で

full_text = list(fulltext()) 

いくつかの問題:

あなたはジェネレータのアイテムを使用したい場合は、結果をループ

まず、変数名(この場合はファイル)としてpython組み込み名を使用しないでください。 ファイルと他の内部接続を扱う場合は、ブロックの最後に自動的にファイルを閉じるwithステートメントを使用することをお勧めします。

関連する問題