2014-04-10 7 views
5

का उपयोग कर टेक्स्ट फ़ाइल से अनन्य शब्दों को कैसे वापस करें I Python का उपयोग करके टेक्स्ट फ़ाइल से सभी अद्वितीय शब्द कैसे वापस कर सकते हैं? उदाहरण के लिए:पायथन

मैं एक रोबोट नहीं कर रहा हूँ

मैं एक इंसान

लौट चाहिए हूँ:

मैं

बजे

नहीं एक

रोबोट

मानव

यहाँ मैं अब तक क्या किया है है:

def unique_file(input_filename, output_filename): 
    input_file = open(input_filename, 'r') 
    file_contents = input_file.read() 
    input_file.close() 
    word_list = file_contents.split() 

    file = open(output_filename, 'w') 

    for word in word_list: 
     if word not in word_list: 
      file.write(str(word) + "\n") 
    file.close() 

पाठ अजगर बनाता है उस में कुछ भी नहीं है फ़ाइल। मुझे यकीन है कि मैं क्या पहली पंक्ति से गलत

उत्तर

9
for word in word_list: 
    if word not in word_list: 

हर word, word_list में है कर रहा हूँ परिभाषा से नहीं कर रहा हूँ।

कि तर्क के बजाय, का उपयोग एक set:

unique_words = set(word_list) 
for word in unique_words: 
    file.write(str(word) + "\n") 

set है केवल अद्वितीय सदस्यों पकड़ है, जो आप वास्तव में क्या प्राप्त करना चाहते हैं।

ध्यान दें कि आदेश संरक्षित नहीं किया जाएगा, लेकिन आपने यह निर्दिष्ट नहीं किया है कि यह एक आवश्यकता है या नहीं।

+1

दुर्भाग्य से, मैं सेट आदेश का उपयोग नहीं कर सकते हैं के रूप में इस होमवर्क पाश कौशल के लिए हमारे में सुधार है। – user927584

+1

मुझे होमवर्क सवालों के साथ मदद करने में कोई समस्या नहीं है, लेकिन आपको बाधाओं को स्पष्ट रूप से सामने रखना होगा जब कुछ करने का सही तरीका मनमाने ढंग से अस्वीकृत किया जाता है – mhlester

+0

मेरी गलती हम किसी भी विधि का उपयोग कर सकते हैं। 30 मिनट पहले एक ईमेल मिला। – user927584

1
def unique_file(input_filename, output_filename): 
    input_file = open(input_filename, 'r') 
    file_contents = input_file.read() 
    input_file.close() 
    duplicates = [] 
    word_list = file_contents.split() 
    file = open(output_filename, 'w') 
    for word in word_list: 
     if word not in duplicates: 
      duplicates.append(word) 
      file.write(str(word) + "\n") 
    file.close() 

इस कोड को हर शब्द पर लूप होता है, और अगर यह एक सूची duplicates में नहीं है, यह शब्द जोड़ देती है और यह एक फाइल करने के लिए लिखता है।

+0

अतिरिक्त सूची रखने के बजाय इसका उपयोग करना संभव है: 'file = open (output_filename,' a ') '? (यह मेरा पहला कोड था (जो काम नहीं करता था)) – user927584

0

आपके कोड के साथ समस्या word_list में पहले से ही इनपुट फ़ाइल के सभी संभावित शब्द हैं। लूप पर पुनरावृत्ति करते समय आप मूल रूप से जांच कर रहे हैं कि word_list में कोई शब्द स्वयं मौजूद नहीं है। तो यह हमेशा झूठा होगा। यह काम करना चाहिए .. (ध्यान दें कि यह wll भी आदेश को संरक्षित करेगा)।

def unique_file(input_filename, output_filename): 
    z = [] 
    with open(input_filename,'r') as fileIn, open(output_filename,'w') as fileOut: 
     for line in fileIn: 
      for word in line.split(): 
       if word not in z: 
       z.append(word) 
       fileOut.write(word+'\n') 
3

बस फ़ाइल में लाइनों पर फिर से सक्रिय करें और केवल अद्वितीय रखने के लिए सेट का उपयोग करें।

... 
import collections 
d = collections.OrderedDict() 
for word in wordlist: d[word] = None 
# use this if you also want to count the words: 
# for word in wordlist: d[word] = d.get(word, 0) + 1 
for k in d.keys(): print k 

आप किए जा सकेंगे:

from itertools import chain 

def unique_words(lines): 
    return set(chain(*(line.split() for line in lines if line))) 

तो बस एक फ़ाइल से सभी अद्वितीय लाइनों पढ़ सकते हैं और प्रिंट उन्हें

with open(filename, 'r') as f: 
    print(unique_words(f)) 
1

यह एक संग्रह के लिए एक विशिष्ट आवेदन प्रतीत हो रहा है करने के लिए निम्न कार्य करें एक संग्रह का भी उपयोग करें।काउंटर(), जो आपके द्वारा खिलाए गए तत्वों की भी गणना करेगा। हालांकि शब्दों का क्रम खो जाएगा। मैंने गिनती और ऑर्डर रखने के लिए एक लाइन जोड़ा।

1

Regex और सेट का उपयोग करना:

import re 
words = re.findall('\w+', text.lower()) 
uniq_words = set(words) 

अन्य तरीका एक Dict पैदा कर रही है और चाबी जैसे शब्दों डालने: एक सेट

for i in range(len(doc)): 
     frase = doc[i].split(" ") 
     for palavra in frase: 
      if palavra not in dict_word: 
       dict_word[palavra] = 1 
print dict_word.keys() 
0

का प्रयोग करें। ऐसा करने के लिए आपको कुछ भी आयात करने की आवश्यकता नहीं है।

#Open the file 
my_File = open(file_Name, 'r') 
#Read the file 
read_File = my_File.read() 
#Split the words 
words = read_File.split() 
#Using a set will only save the unique words 
unique_words = set(words) 
#You can then print the set as a whole or loop through the set etc 
for word in unique_words: 
    print(word) 
0
string = "I am not a robot\n I am a human" 
list_str = string.split() 
print list(set(list_str)) 
+0

ओपी के उदाहरण इनपुट पर भी काम नहीं करता है। संकेत: '.split()' 'split ('') ' – trentcl

+0

@trentcl hwz से अलग है? ... thnx आपको अपना बिंदु मिला ..., वास्तव में एक अच्छा बिंदु '.split()' के बीच भिन्न होता है और '.plit ('')' –

+0

बेहतर, लेकिन ईमानदारी से, यह प्रश्न 3 साल से अधिक पुराना है और स्वीकार्य उत्तर मूल रूप से आपके जैसा ही है, स्पष्टीकरण के अलावा, इसलिए मैंने इसके बजाय इसे ऊपर उठाया। यदि आपके पास जोड़ने के लिए कुछ रचनात्मक है, जैसे कि पूरी फ़ाइल को स्मृति में पहली बार लोड किए बिना सेट का निर्माण करना, यह एक अच्छा जवाब होगा; अगर यह सिर्फ "सेट 'का उपयोग करने के लिए उबाल जाता है" मुझे नहीं पता कि आपने परेशान क्यों किया। – trentcl