2011-01-24 15 views
6

Sto passando un po 'di tempo approssimativo a stabilire come conteggiare determinati elementi all'interno di un file di testo usando Python. Sono pochi mesi in Python e ho familiarità con le seguenti funzioni;Conteggio di linee, parole e caratteri all'interno di un file di testo usando Python

  • raw_input
  • aperta
  • dividere
  • len
  • stampa
  • rsplit()

Ecco il mio codice finora:

fname = "feed.txt" 
fname = open('feed.txt', 'r') 

num_lines = 0 
num_words = 0 
num_chars = 0 

for line in feed: 
    lines = line.split('\n') 

A questo punto non sono sicuro di cosa fare dopo. Sento che il modo più logico per avvicinarsi sarebbe quello di contare prima le linee, contare le parole all'interno di ogni riga e poi contare il numero di caratteri all'interno di ogni parola. Ma uno dei problemi a cui mi sono imbattuto era cercare di eseguire tutte le funzioni necessarie contemporaneamente, senza dover riaprire il file per eseguire separatamente ciascuna funzione.

+0

Penso tu voglia dire 'feed = open (...) '. Inoltre, c'è un motivo per non usare [wc] (http://unixhelp.ed.ac.uk/CGI/man-cgi?wc)? –

+0

Hai ragione.Leggerò un po 'di più sull'uso di "wc", grazie per il link. –

risposta

20

Prova questo:

fname = "feed.txt" 

num_lines = 0 
num_words = 0 
num_chars = 0 

with open(fname, 'r') as f: 
    for line in f: 
     words = line.split() 

     num_lines += 1 
     num_words += len(words) 
     num_chars += len(line) 

Torna al tuo codice:

fname = "feed.txt" 
fname = open('feed.txt', 'r') 

qual è il punto di questo? fname è prima una stringa e poi un oggetto file. Non si usa realmente la stringa definita nella prima riga e si dovrebbe usare una variabile solo per una cosa: una stringa o un oggetto file.

for line in feed: 
    lines = line.split('\n') 

line è una riga dal file. Non ha senso a split('\n') it.

+1

apprezza il guasto. Pensavo di aver bisogno di aggiungere '\ n' per abbattere ogni riga, ma sembra che line.split() realizzi ciò che intendevo. –

+2

@Alex Karpowitsch: l'iterazione su un file come in 'for line in file' spezza il file in linee. 'line.split()' trasforma una linea in parole. –

+1

Il numero di caratteri di 'wc' include almeno anche le interruzioni di riga (e il suo conteggio« carattere »è sempre la lunghezza in byte del file (anche per UTF-16). Quindi, per essere effettivamente un clone potrebbe essere necessario un po 'di lavoro , a seconda che sia questo il PO. – Joey

3

funzioni che potrebbero essere utili:

  • open("file").read() che legge il contenuto del file intero in una sola volta
  • 'string'.splitlines() che separa le linee gli uni dagli altri (e scarta le righe vuote)

By usando len() e quelle funzioni potresti realizzare quello che stai facendo.

+0

grazie, proverò a usarli. –

2
fname = "feed.txt" 
feed = open(fname, 'r') 

num_lines = len(feed.splitlines()) 
num_words = 0 
num_chars = 0 

for line in lines: 
    num_words += len(line.split()) 
1

Uno dei modi che mi piace è questo, ma può essere un bene per file di piccole dimensioni

with open(fileName,'r') as content_file: 
    content = content_file.read() 
    lineCount = len(re.split("\n",content)) 
    words = re.split("\W+",content.lower()) 

Per contare parole, v'è a due vie, se non si cura di ripetizione è possibile basta fare

words_count = len(words) 

se si desidera che i conti di ogni parola si può solo fare

import collections 
words_count = collections.Counter(words) #Count the occurrence of each word 
Problemi correlati