2011-01-24 40 views
6

Tôi đang có một chút thời gian khó xác định cách tôi sẽ đếm các phần tử nhất định trong tệp văn bản bằng Python. Tôi là một vài tháng vào Python và tôi quen thuộc với các chức năng sau đây;Đếm các dòng, từ và ký tự trong một tệp văn bản bằng cách sử dụng Python

  • raw_input
  • mở
  • chia
  • len
  • in
  • rsplit()

Dưới đây là mã của tôi cho đến nay:

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

Tại thời điểm này tôi không biết phải làm gì tiếp theo. Tôi cảm thấy cách hợp lý nhất để tiếp cận nó là đầu tiên đếm các dòng, đếm các từ trong mỗi dòng, và sau đó đếm số ký tự trong mỗi từ. Nhưng một trong những vấn đề tôi gặp phải là cố gắng thực hiện tất cả các chức năng cần thiết cùng một lúc mà không phải mở lại tệp để thực hiện từng chức năng một cách riêng biệt.

+0

Tôi nghĩ bạn có nghĩa là 'feed = open (...) '. Ngoài ra, có một lý do không sử dụng [wc] (http://unixhelp.ed.ac.uk/CGI/man-cgi?wc) không? –

+0

Bạn nói đúng.Tôi sẽ đọc thêm một chút về cách sử dụng 'wc', cảm ơn bạn đã liên kết. –

Trả lời

20

Hãy thử điều này:

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) 

Về mã của bạn:

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

điểm này là gì? fname là một chuỗi đầu tiên và sau đó là đối tượng tệp. Bạn không thực sự sử dụng chuỗi được định nghĩa trong dòng đầu tiên và bạn nên sử dụng một biến cho một điều duy nhất: một chuỗi hoặc một đối tượng tệp.

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

line là một dòng từ tệp. Nó không có ý nghĩa với split('\n') nó.

+1

đánh giá cao sự cố. Tôi nghĩ rằng tôi cần phải thêm '\ n' để phá vỡ mọi dòng, nhưng có vẻ như line.split() hoàn thành những gì tôi dự định. –

+2

@Alex Karpowitsch: Lặp lại một tệp như trong 'cho dòng trong tệp' sẽ chia nhỏ tệp thành các dòng. 'line.split()' biến một dòng thành các từ. –

+1

Số ký tự 'wc' ít nhất cũng bao gồm dấu ngắt dòng (và số« ​​ký tự »luôn là độ dài byte của tệp (ngay cả đối với UTF-16) .Vì vậy, thực ra là một bản sao nó có thể cần một số công việc , tùy thuộc vào đó là những gì OP được sau khi – Joey

3

Chức năng mà có thể hữu ích:

  • open("file").read() mà đọc nội dung của toàn bộ tập tin cùng một lúc
  • 'string'.splitlines() mà tách dòng từ mỗi khác (và loại bỏ dòng trống)

Bằng sử dụng len() và các hàm đó bạn có thể thực hiện những gì bạn đang làm.

+0

cảm ơn, tôi sẽ cố gắng sử dụng những người. –

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

Một trong những cách tôi thích là một trong những điều này, nhưng có thể tốt cho các tập tin nhỏ

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

Để đếm số từ, có hai cách, nếu bạn không quan tâm đến sự lặp lại, bạn có thể chỉ làm

words_count = len(words) 

nếu bạn muốn đếm từng từ mà bạn chỉ có thể làm

import collections 
words_count = collections.Counter(words) #Count the occurrence of each word 
Các vấn đề liên quan