Come restituire uniche parole dal file di testo utilizzando Python

Come faccio a restituire tutte le uniche parole da un file di testo utilizzando Python?
Per esempio:

Io non sono un robot

Sono un essere umano

Dovrebbe restituire:

Ho

sono

non

un

robot

umana

Qui è quello che ho fatto finora:

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()

Il file di testo Python crea non ha nulla in essa. Io non sono sicuro di quello che sto facendo male

InformationsquelleAutor user927584 | 2014-04-10



9 Replies
  1. 10
    for word in word_list:
        if word not in word_list:

    ogni word è in word_list, per definizione, dalla prima linea.

    Invece di quella logica, utilizzare un set:

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

    sets solo tenere unici membri, che è esattamente quello che stai cercando di raggiungere.

    Nota che l’ordine non verranno mantenute, ma non hai specificato se è un requisito.

    • Purtroppo, non è possibile utilizzare il comando set come questo lavoro è quello di migliorare il nostro ciclo for competenze.
    • Non ho alcun problema di aiutare con i compiti a casa domande, ma hai avuto modo di definire i vincoli chiaramente di fronte quando il modo giusto per fare qualcosa è arbitrariamente consentita
    • Il mio errore è possibile utilizzare qualsiasi metodo. Ricevuto una email di 30 minuti fa.
  2. 4

    Semplicemente scorrere le righe del file e utilizzare set di tenere solo le esclusive.

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

    Poi semplicemente leggere tutte uniche, le righe di un file e di stampa

    with open(filename, 'r') as f:
        print(unique_words(f))
  3. 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()

    Questo codice loop su ogni parola, e se non è in un elenco duplicates, aggiunge la parola e lo scrive in un file.

    • Invece di avere un elenco aggiuntivo è possibile utilizzare: file = open(output_filename, 'a') ? (Questo è stato il mio primo codice (che non funziona))
  4. 1

    Questa sembra essere una tipica applicazione per una collezione:

    ...
    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

    Si potrebbe anche usare una raccolta.Contatore(), che contano anche gli elementi alimentare. L’ordine delle parole vorresti ottenere perso. Ho aggiunto una riga per il conteggio e per mantenere l’ordine.

  5. 1

    Usando l’espressione regolare e Impostare:

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

    Altro modo è la creazione di un Dict e inserendo parole come chiavi:

    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()
  6. 1
    string = "I am not a robot\n I am a human"
    list_str = string.split()
    print list(set(list_str))
    • Non funziona nemmeno su OP esempio di input. Suggerimento: .split() è diverso da .split(' ')
    • hwz ora?…thnx got ur punto…, davvero un bel punto di diff tra .split() e .split(' ')
    • Meglio, ma onestamente, questa domanda è di più di 3 anni e accettato risposta è fondamentalmente lo stesso come la tua, tranne che con la spiegazione, e così ho con voto positivo invece che uno. Se avete qualcosa di costruttivo da aggiungere, come forse la creazione del set senza prima carica tutto il file in memoria, questa potrebbe essere una buona risposta; se si riduce al solo “uso set” non so perché è infastidito.
  7. 0

    Il problema con il tuo codice è word_list ha già tutte le parole possibili del file di input. Quando scorrere il loop si sono fondamentalmente di verificare se una parola in word_list non è presente a se stesso. Così sarà sempre false. Questo dovrebbe funzionare.. (Nota che questo wll anche mantenere l’ordine).

    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')
  8. 0

    Utilizzare un set. Non c’è bisogno di importare nulla a che fare questo.

    #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)
  9. 0
    try:
        with open("gridlex.txt",mode="r",encoding="utf-8")as india:
    
            for data in india:
                if chr(data)==chr(data):
                    print("no of chrats",len(chr(data)))
                else:
                    print("data")
    except IOError:
        print("sorry")

Lascia un commento