2016-04-13 32 views
0

Aşağıdaki işlevde birden çok .txt dosyasından tam metinleri döndürmeye çalışıyorum ve sonuçları bir listeye ekliyorum ancak işlevim yalnızca dizindeki ilk dosyadaki metni döndürüyor. Eğer baskı ile geri dönüşümü değiştirirsem, tüm sonuçları konsola kendi satırında kaydeder ama sonuçları bir listeye ekleyemiyorum. Dönüş işleviyle neyi yanlış yapıyorum. Teşekkürler.Yalnızca geri dönen 1. öğe

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

Girintinizi girintinizde düzeltin (dönüş iç döngüdedir) – jmugz3

cevap

0

Döngünün içine return kodunu yerleştiriyorsunuz. Bence yapmak istiyorsun. Bununla birlikte, değerleri burada verebilirsin.

for file in matching_txt: 
    f = open(file, "r") 
    .... 
    full_text.append(all_seqs) 
return full_text 
0

Sen bellek kullanımı açısından daha verimli olan bir jeneratör için işlevini dönüştürebilirsiniz: bunlar, diğer akıllı sadece can iri değilse

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 

Sonra bir listeye jeneratör dönüştürmek Fonksiyonunuzda

full_text = list(fulltext()) 

Bazı sorunlar:

Eğer jeneratörün öğeleri kullanmak istiyorsanız sonucun üzerine döngü

Öncelikle, python yerleşik adlarını değişken adları olarak kullanmayın (bu örnekte). İkincisi, dosyalar (ve diğer iç bağlantılar) ile uğraşırken, bloğun sonunda otomatik olarak kapanacak olan with bildirimini kullanmanız daha iyi olur.

İlgili konular