2011-01-24 2 views
6

У меня есть немного сложного времени, излагающего, как я буду считать некоторые элементы в текстовом файле с помощью Python. Я несколько месяцев в Python, и я знаком со следующими функциями;Подсчет строк, слов и символов в текстовом файле с использованием Python

  • raw_input
  • открыт
  • расколоть
  • Len
  • печати
  • rsplit()

Вот мой код до сих пор:

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

На данный момент я не уверен, что делать дальше. Я считаю, что наиболее логичным способом приблизиться к ней было бы сначала подсчет строк, подсчет слов в каждой строке, а затем подсчет количества символов в каждом слове. Но одна из проблем, с которыми я столкнулась, заключалась в том, чтобы одновременно выполнить все необходимые функции, не перекручивая файл для выполнения каждой функции отдельно.

+0

Я думаю, вы имеете в виду 'feed = open (...) '. Кроме того, есть ли причина не использовать [wc] (http://unixhelp.ed.ac.uk/CGI/man-cgi?wc)? –

+0

Вы правы.Я еще немного прочитаю об использовании «wc», спасибо за ссылку. –

ответ

20

Попробуйте это:

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) 

Назад к коду:

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

чем смысл этого? fname - это строка сначала, а затем файл. Вы действительно не используете строку, определенную в первой строке, и вы должны использовать одну переменную только для одной вещи: либо строку, либо файл-объект.

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

line одна строка из файла. Это не имеет смысла для split('\n').

+1

оцените неисправность. Я думал, что мне нужно добавить «\ n», чтобы сломать каждую строку, но кажется, что line.split() выполняет то, что я намеревался. –

+2

@Alex Karpowitsch: Итерирование по файлу, как в 'for line in file', разбивает файл на строки. 'line.split()' превращает строку в слова. –

+1

Число символов 'wc', по крайней мере, включает в себя разрывы строк (и его« символ »« count »всегда является длиной байта файла (даже для UTF-16). Таким образом, чтобы быть на самом деле клоном, может потребоваться некоторая работа , в зависимости от того, что это было после OP. – Joey

3

Функции, которые могут быть полезны:

  • open("file").read() который считывает содержимое всего файла сразу
  • 'string'.splitlines(), которая отделяет линии друг от друга (и отбрасывает пустые строки)

По используя len() и те функции, которые вы могли бы выполнить, что делаете.

+0

спасибо, я попробую использовать их. –

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

Один из пути мне нравится это один, но может быть хорошо для маленьких файлов

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

для подсчета слов, есть два пути, если вы не заботитесь о повторении вы можете вобще

words_count = len(words) 

если вы хотите отсчеты каждого слова вы можете просто сделать

import collections 
words_count = collections.Counter(words) #Count the occurrence of each word 
Смежные вопросы