2012-11-06 6 views
7

में फ़ाइल पढ़ने के बाद शब्दों की एक सूची लौटने पर मेरे पास एक टेक्स्ट फ़ाइल है जिसका नाम test.txt है। मैं इसे पढ़ना चाहता हूं और फ़ाइल से सभी शब्दों (न्यूलाइन हटाए गए) की एक सूची वापस भेजना चाहता हूं।पायथन

यह मेरे वर्तमान कोड है:

['hello','there','how','is','everything','thank','you','all','again','thanks','a','lot'] 
+1

http://docs.python.org/2/library/stdtypes.html#str।विभाजित – kreativitea

उत्तर

13

words_list.append(...) बदलें:

['hello there how is everything ', 'thank you all', 'again', 'thanks a lot'] 

मैं इस तरह देखने के लिए सूची चाहते हैं:

def read_words(test.txt): 
    open_file = open(words_file, 'r') 
    words_list =[] 
    contents = open_file.readlines() 
    for i in range(len(contents)): 
     words_list.append(contents[i].strip('\n')) 
    return words_list  
    open_file.close() 

इस कोड चल रहा है इस सूची का उत्पादन निम्न के साथ लूप के लिए लाइन:

words_list.extend(contents[i].split()) 

इस खाली स्थान के पात्रों पर प्रत्येक पंक्ति बंट जाएगा, और फिर words_list के परिणामस्वरूप सूची के प्रत्येक तत्व जोड़ें।

या एक सूची समझ के रूप में पूरे समारोह को फिर से लिखने के लिए एक वैकल्पिक पद्धति के रूप में:

def read_words(words_file): 
    return [word for line in open(words_file, 'r') for word in line.split()] 
+0

धन्यवाद एफ.जे, यह उपयोगी –

5

यहाँ है मैं यह कैसे लिखना चाहते हैं:

def read_words(words_file): 
    with open(words_file, 'r') as f: 
    ret = [] 
    for line in f: 
     ret += line.split() 
    return ret 

print read_words('test.txt') 

समारोह का उपयोग करके कुछ हद तक कम किया जा सकता itertools, लेकिन मुझे व्यक्तिगत रूप से परिणाम कम पठनीय लगता है:

import itertools 

def read_words(words_file): 
    with open(words_file, 'r') as f: 
    return list(itertools.chain.from_iterable(line.split() for line in f)) 

print read_words('test.txt') 

दूसरे संस्करण के बारे में अच्छी बात यह है कि इसे पूरी तरह जनरेटर-आधारित होने के लिए बनाया जा सकता है और इस प्रकार सभी फाइलों के शब्दों को एक साथ स्मृति में रखने से बचें।

17

फ़ाइल के आकार के आधार पर यह लगता है जैसे कि यह जितना आसान होगा:

with open(file) as f: 
    words = f.read().split() 
+1

+1 था क्योंकि यह उपभोग और बिंदु पर है। –

3

यह करने के लिए कई तरीके हैं। यहाँ कुछ कर रहे हैं:

आप दोहराए गए शब्दों के बारे में परवाह नहीं करते हैं:

def getWords(filepath): 
    with open('filepath') as f: 
     return list(itertools.chain(line.split() for line in f)) 

आप जिसमें प्रत्येक शब्द केवल एक बार प्रतीत होता है शब्दों की एक सूची वापस करने के लिए करना चाहते हैं:

नोट: इस शब्द का क्रम बनाए रखने के नहीं है

def getWords(filepath): 
    with open('filepath') as f: 
     return {word for word in line.split() for line in f} # python2.7 
     return set((word for word in line.split() for line in f)) # python 2.6 

यदि आप चाहते हैं एक सेट शब्दों का क्रम सुरक्षित रखना चाहते हैं --and--:

def getWords(filepath): 
    with open('filepath') as f: 
     return collections.Counter(itertools.chain(line.split() for line in file)) 

आशा है कि इन मदद

:

def getWords(filepath): 
    with open('filepath') as f: 
     words = [] 
     pos = {} 
     position = itertools.count() 
     for line in f: 
      for word in line.split(): 
       if word not in pos: 
        pos[word] = position.next() 
         words.append(word) 
    return sorted(words, key=pos.__getitem__) 

आप एक शब्द आवृत्ति शब्दकोश चाहते हैं