Bộ đếm từ python

Chương này dành cho những người mới làm quen với Python, nhưng tôi khuyên mọi người nên xem qua nó, để tất cả chúng ta đều bình đẳng

Bước chân em bé. Đọc và in một tập tin

Được rồi mọi người, chúng ta sẽ bắt đầu nhẹ nhàng. Chúng ta sẽ xây dựng một tiện ích đơn giản gọi là bộ đếm từ. Bạn nào đã dùng Linux sẽ biết đây là tiện ích wc. Trên Linux, bạn có thể gõ

wc 

 

để lấy số lượng từ, dòng và ký tự trong một tệp. Tiện ích wc tất nhiên là khá cao cấp vì nó đã có từ rất lâu rồi. Chúng tôi sẽ xây dựng một phiên bản trẻ em của điều đó. Điều này thú vị hơn là chỉ in Hello World ra màn hình

Với ý nghĩ đó, hãy bắt đầu. Tệp chúng ta đang làm việc là read_file. py, nằm trong thư mục Wordcount

#!/usr/bin/python

Dòng đầu tiên bắt đầu bằng dấu #. được sử dụng chủ yếu trên các hệ thống Linux. Nó nói với trình bao rằng đây là tệp Python và sẽ được chạy như vậy. Nó cũng cho Linux biết nên sử dụng trình thông dịch nào (trong trường hợp của chúng tôi là Python). Nó không gây hại gì trên Windows (vì bất kỳ thứ gì bắt đầu bằng dấu # đều là một nhận xét trong Python), vì vậy chúng tôi giữ nó trong

Hãy bắt đầu xem mã

f = open("birds.txt", "r")

Chúng tôi chỉ cần mở một tệp có tên là “chim. txt”. Nó phải tồn tại trong thư mục hiện tại (nghĩa là thư mục bạn đang chạy mã từ đó). Sau này, chúng tôi sẽ đề cập đến việc đọc từ dòng lệnh, nhưng hiện tại, đường dẫn được mã hóa cứng. Chữ r có nghĩa là tệp sẽ được mở ở chế độ chỉ đọc. Các chế độ phổ biến khác là w để ghi, a để nối thêm. Bạn cũng có thể đọc/ghi các tệp nhị phân, tuy nhiên chúng tôi sẽ không đi sâu vào vấn đề đó vào lúc này. Tệp của chúng tôi là văn bản thuần túy

data = f.read()
f.close()

Sau khi mở tệp, chúng ta đọc nội dung của nó vào một biến có tên là dữ liệu và đóng tệp

print(data)

Và chúng tôi in tệp. Và bây giờ, để kiểm tra mã của chúng tôi.
Nếu bạn đang dùng Linux, bạn chỉ cần gõ.

./read_file.py

để chạy nó. Bạn có thể phải làm cho tệp thực thi được. Trên Windows, bạn sẽ cần làm

python read_file.py

Chuyển đến thư mục có tên WordCount và chạy tệp ở đó

python ./read_file.py
STRAY BIRDS
BY
RABINDRANATH TAGORE

STRAY birds of summer come to my
window to sing and fly away.

And yellow leaves of autumn, which
have no songs, flutter and fall there
with a sigh.


Và ở đó bạn đi. Chương trình Python đầu tiên của bạn

Đếm từ và dòng

Được rồi, vì vậy chúng ta có thể đọc một tệp và in nó trên màn hình. Bây giờ, để đếm số từ. Chúng tôi sẽ sử dụng tệp count_words. py trong thư mục WordCount

________số 8

Bây giờ những dòng này nên quen thuộc. Chúng tôi mở tệp và đọc nó

words = data.split(" ")

Python có một số hàm dựng sẵn cho chuỗi. Một là hàm split() tách chuỗi trên tham số đã cho. Trong ví dụ trên, chúng ta đang tách trên một không gian. Hàm trả về một danh sách (mà Python gọi là mảng) của chuỗi được phân tách trên không gian

Để xem nó hoạt động như thế nào, tôi sẽ kích hoạt bảng điều khiển IPython

#!/usr/bin/python

0

Tôi lấy một câu “Tôi là con trai” và tách nó ra một khoảng trắng. Python trả về một danh sách có bốn phần tử. ['Tôi là con trai'].
Chúng ta có thể chia rẽ mọi thứ. Ở đây, tôi chia trên một dấu phẩy.

#!/usr/bin/python

1

Quay trở lại ví dụ của chúng tôi

#!/usr/bin/python

2

Bạn nên biết những gì chúng tôi đang làm bây giờ. Chúng tôi đang tách tệp chúng tôi đọc trên không gian. Điều này sẽ cung cấp cho chúng tôi số lượng từ, vì trong tiếng Anh, các từ được phân tách bằng dấu cách (như thể bạn chưa biết)

#!/usr/bin/python

3

Vì vậy, chúng tôi in những từ mà chúng tôi tìm thấy. Tiếp theo, chúng ta gọi hàm len(), trả về độ dài của danh sách. Hãy nhớ rằng tôi đã nói hàm split() chia chuỗi thành một danh sách?

Tiếp theo, chúng tôi tìm số dòng bằng cách sử dụng cùng một phương pháp

#!/usr/bin/python

4

Chúng tôi làm điều tương tự, ngoại trừ điều này, chúng tôi chia nhỏ ký tự xuống dòng (“\n”). Đối với những người không biết, ký tự xuống dòng là mã yêu cầu trình soạn thảo chèn một dòng mới, trả về. Bằng cách đếm số ký tự xuống dòng, chúng ta có thể nhận được số dòng trong chương trình

Chạy tập tin count_words. py và xem kết quả

#!/usr/bin/python

5

Bây giờ hãy mở tệp chim. txt và đếm số dòng bằng tay. Bạn sẽ tìm thấy câu trả lời là khác nhau. Đó là bởi vì có một lỗi trong mã của chúng tôi. Nó cũng đang đếm các dòng trống. Chúng ta cần khắc phục điều đó ngay bây giờ

Đếm dòng cố định

#!/usr/bin/python

6

Đây là mã cũ, mã chúng ta cần sửa

Vòng lặp for trong Python

Cú pháp của vòng lặp for là

#!/usr/bin/python

7

 

Một vài điều quan trọng. Có dấu hai chấm (. ) sau lệnh for. Và trong Python, không có dấu ngoặc {} hoặc từ khóa bắt đầu kết thúc. Ví dụ: nếu bạn đến từ thế giới kiểu C/C++/Java/C#, thì đây là cách bạn sẽ viết vòng lặp for của mình

#!/usr/bin/python

8

 

Dấu ngoặc nhọn {} báo cho trình biên dịch biết mã này nằm trong vòng lặp for. Python không có các dấu ngoặc này. Thay vào đó, nó sử dụng khoảng trắng/thụt đầu dòng. Nếu bạn không sử dụng thụt đầu dòng, Python sẽ phàn nàn. Thí dụ

#!/usr/bin/python

9

 

Cách chính xác để làm điều đó là

f = open("birds.txt", "r")

0

 

Sử dụng bao nhiêu thụt lề? . Nếu bạn đang sử dụng một trình soạn thảo văn bản tốt như Sublime Text, nó sẽ tự động làm điều đó.
Quay lại mã của chúng ta,

f = open("birds.txt", "r")

1

 

Hãy đi qua từng dòng này

f = open("birds.txt", "r")

2

Chúng tôi đang lặp lại các dòng danh sách của chúng tôi. l sẽ chứa từng dòng khi Python đang lặp qua chúng

Lưu ý thêm, những bạn có nền tảng C/C++ sẽ ngạc nhiên khi chúng tôi không sử dụng mảng. Chúng ta không cần— Python sẽ tự động làm điều đó cho chúng ta. Python sẽ lấy các dòng danh sách và tự động lặp lại nó. Chúng tôi không cần phải thực hiện các dòng [0], dòng [1], dòng [2], v.v. như bạn sẽ làm trong C/C++. Trên thực tế, làm như vậy là một phản mẫu

Vì vậy, bây giờ chúng tôi có mỗi dòng. Bây giờ chúng ta cần kiểm tra xem nó có trống không. Có rất nhiều cách để làm điều đó. Một là

f = open("birds.txt", "r")

3

Điều này kiểm tra xem dòng hiện tại có độ dài bằng 0 hay không, nhưng có một cách thanh lịch hơn để thực hiện

f = open("birds.txt", "r")

4

 

Từ khóa not trong Python sẽ tự động kiểm tra sự trống rỗng cho chúng ta. Nếu dòng trống, chúng tôi xóa nó khỏi danh sách bằng lệnh remove()

Một lần nữa, giống như vòng lặp for, chúng ta cần cung cấp bốn khoảng trắng để Python biết rằng lệnh này nằm trong điều kiện if

Bây giờ chúng ta sẽ có số dòng chính xác. Chạy Count_lines_fixed. py để xem kết quả

f = open("birds.txt", "r")

5

Mang tất cả lại với nhau

Bây giờ chúng ta cần buộc tất cả lại với nhau. số từ. py là tập tin cuối cùng của chúng tôi

f = open("birds.txt", "r")

6

Điều mới duy nhất ở đây là lệnh nhập sys. Điều này là cần thiết để đọc từ dòng lệnh

Bây giờ chúng tôi sẽ đưa mã của chúng tôi vào các chức năng. Cách viết một hàm trong Python là

f = open("birds.txt", "r")

7

 

def định nghĩa một chức năng. Chú ý dấu hai chấm (. ) và khoảng trắng?

Chức năng đầu tiên của chúng tôi đếm số lượng từ

f = open("birds.txt", "r")

8

 

Nó lấy dữ liệu danh sách và trả về số lượng từ. Hãy nhớ rằng đây là mã giống hệt như trước đây, sự khác biệt duy nhất là bây giờ nó nằm trong một chức năng

Chức năng đếm dòng cũng tương tự

f = open("birds.txt", "r")

9

 

 

Phần tiếp theo là một trong những dòng được tìm kiếm nhiều nhất trên Google

data = f.read()
f.close()

0

Có hai cách để gọi các tệp Python

  1. Bạn có thể gọi tệp trực tiếp, tên tệp python, đó là những gì chúng tôi đang làm

data = f.read()
f.close()

1

Chúng tôi chưa đề cập đến việc gọi tệp dưới dạng thư viện. Nếu bạn muốn sử dụng hàm count_words trong một tệp khác, bạn sẽ làm điều này

data = f.read()
f.close()

2

Điều này sẽ lấy hàm count_words và cung cấp hàm này trong tệp mới.
Bạn cũng có thể làm.

data = f.read()
f.close()

3

Điều này sẽ nhập tất cả các hàm và biến, nhưng nói chung, phương pháp này không được khuyến nghị. Bạn chỉ nên nhập những gì bạn cần

Bây giờ, đôi khi bạn sẽ có mã mà bạn chỉ muốn chạy nếu tệp đang được gọi trực tiếp, nghĩa là không cần nhập. Nếu vậy, bạn có thể đặt nó dưới dòng này

data = f.read()
f.close()

0

Điều này có nghĩa là (bằng tiếng Anh đơn giản). Chỉ chạy mã này nếu tôi đang chạy tệp này từ dòng lệnh (hoặc một cái gì đó tương tự). Nếu chúng tôi nhập tệp này vào tệp khác, tất cả mã này sẽ bị bỏ qua

Bằng cách sử dụng cú pháp này, bạn có thể đảm bảo chức năng của mình chỉ chạy khi ai đó gọi trực tiếp chương trình của bạn và không nhập dưới dạng mô-đun

__name__ là một biến nội bộ được đặt thành __main__ bởi trình thông dịch Python khi chúng tôi đang chạy chương trình độc lập

Bây giờ trong các ví dụ của chúng tôi, chúng tôi đã gọi các tệp trực tiếp, nhưng tôi nghĩ tôi sẽ chỉ cho bạn cú pháp này trong trường hợp bạn đã từng thấy nó trên web. Nó là tùy chọn trong trường hợp của chúng tôi, nhưng thực hành tốt trong trường hợp bạn muốn biến mã của mình thành thư viện. Ngay cả khi bạn không muốn vào lúc này, bạn vẫn nên sử dụng lệnh vì nó chỉ có một dòng

data = f.read()
f.close()

5

 

Hãy nhớ rằng chúng tôi đã nhập thư viện sys? . lệnh argv, trả về các đối số dòng lệnh. Bạn đã biết người bạn cũ của chúng tôi len(). Chúng tôi kiểm tra xem số lượng đối số dòng lệnh có ít hơn hai hay không (đối số đầu tiên luôn là tên của tệp) và nếu có, hãy in một thông báo và thoát. Đây là những gì sẽ xảy ra

data = f.read()
f.close()

6

 

Dòng tiếp theo

data = f.read()
f.close()

7

Như tôi đã nói, phần tử đầu tiên của sys. argv (hoặc argv[0]) sẽ là tên của chính tệp đó (word_count. py trong trường hợp của chúng tôi). Thứ hai sẽ là tệp người dùng đã nhập. Chúng tôi đọc rằng

data = f.read()
f.close()

8

Chúng tôi đọc dữ liệu từ tập tin

data = f.read()
f.close()

9

Và bây giờ chúng ta gọi các hàm của mình để đếm số từ và dòng và in kết quả. thì đấy. Bộ đếm từ đơn giản

print(data)

0

 

Bộ đếm từ không hoàn hảo và nếu bạn thử với các tệp khác nhau, bạn sẽ tìm thấy nhiều lỗi. Nhưng nó đủ tốt để chúng ta chuyển sang chương tiếp theo