2011-01-24 40 views
6

Estoy teniendo un momento difícil para describir cómo contendría ciertos elementos dentro de un archivo de texto usando Python. Llevo unos meses en Python y estoy familiarizado con las siguientes funciones;Contar líneas, palabras y caracteres dentro de un archivo de texto usando Python

  • raw_input
  • abierta
  • dividir
  • len
  • de impresión
  • rsplit()

Aquí está mi código hasta ahora:

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

En este punto, no estoy seguro de qué hacer a continuación. Creo que la forma más lógica de abordarlo sería contar primero las líneas, contar las palabras dentro de cada línea y luego contar el número de caracteres dentro de cada palabra. Pero uno de los problemas con los que me encontré fue tratar de realizar todas las funciones necesarias a la vez, sin tener que volver a abrir el archivo para realizar cada función por separado.

+0

Creo que te refieres a 'feed = open (...) '. Además, ¿hay alguna razón para no usar [wc] (http://unixhelp.ed.ac.uk/CGI/man-cgi?wc)? –

+0

Tienes razón.Leeré un poco más sobre el uso de 'wc' también, gracias por el enlace. –

Respuesta

20

Prueba esto:

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) 

Volver a su código:

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

¿cuál es el punto de esto? fname es una cadena primero y luego un objeto de archivo. Realmente no usa la cadena definida en la primera línea y debe usar una variable para una sola cosa: una cadena o un objeto de archivo.

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

line es una línea del archivo. No tiene sentido para split('\n').

+1

aprecia el desglose. Pensé que necesitaba agregar '\ n' para descomponer cada línea, pero parece que line.split() logra lo que pretendía. –

+2

@Alex Karpowitsch: al iterar sobre un archivo como en 'for line in file' se divide el archivo en líneas. 'line.split()' convierte una línea en palabras. –

+1

El recuento de caracteres de 'wc' al menos también incluye saltos de línea (y su caracter de" caracteres "es siempre el byte de longitud del archivo (incluso para UTF-16). Por lo tanto, para ser realmente un clon puede necesitar algún trabajo , dependiendo de si eso es lo que estaba buscando el OP. – Joey

3

funciones que pueden ser útiles:

  • open("file").read() que lee el contenido de todo el archivo a la vez
  • 'string'.splitlines() que separa las líneas entre sí (y descarta las líneas vacías)

Por usando len() y esas funciones puedes lograr lo que estás haciendo.

+0

gracias, intentaré usar esos. –

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 de la manera que como es éste, pero puede ser bueno para archivos pequeños

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

para contar palabras, hay dos vías, si no se preocupan por la repetición que pueda acaba de hacer

words_count = len(words) 

si desea que los cargos de cada palabra que acaba puede hacer

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