Đọc từng dòng tệp và in số từ của từng dòng trong Python

Đôi khi chúng tôi muốn kiểm tra xem một tệp nhất định lớn hay nhỏ như thế nào. Tổng số dòng của một tệp nhất định giúp chúng tôi biết tệp đó lớn như thế nào. Linux, giống như bất kỳ hệ điều hành nào khác, cung cấp cho chúng tôi một số cách để đạt được nhiệm vụ này

Trong hướng dẫn này, chúng ta sẽ xem xét các cách phổ biến nhất để đếm số dòng của một tệp được chỉ định bằng Bash

2. Cài đặt

Đối với hướng dẫn nhanh này, chúng tôi sẽ sử dụng tệp văn bản có tên là lập trình. txt có chứa một số ngôn ngữ lập trình hàng đầu được sử dụng ngày nay

$ cat programming.txt
JavaScript
Java
C
Python
C#
PHP
C++
Go
R
Ruby

Nếu chúng tôi đếm số dòng theo cách thủ công, chúng tôi sẽ nhận được 10. Đếm thủ công sẽ trở nên mệt mỏi và khó đạt được khi số lượng dòng tăng lên. Tuy nhiên, có thể dễ dàng đạt được tổng số dòng bằng cách sử dụng các lệnh đầu cuối khác nhau

3. nhà vệ sinh

Lệnh wc được sử dụng để tìm số dòng, ký tự, từ và byte của tệp

Để tìm số dòng bằng wc, chúng tôi thêm tùy chọn -l. Điều này sẽ cung cấp cho chúng tôi tổng số dòng và tên của tệp

Hãy kiểm tra số dòng của tệp của chúng tôi bằng lệnh wc -l

$ wc -l programming.txt
10 programming.txt

Từ đầu ra, chúng ta có thể thấy rằng nó được in số 10, cho biết tổng số dòng và tên của tệp, lập trình. txt

Chúng ta có thể yêu cầu shell chuyển hướng chương trình. txt thành đầu vào tiêu chuẩn của lệnh wc -l. Điều này sẽ cung cấp cho chúng tôi số dòng không có tên tệp

$ wc -l < programming.txt
10

Một cách phổ biến khác để thực hiện việc này với wc là sử dụng cat và chuyển tệp sang lệnh

$ cat programming.txt | wc -l
10

4. sed

sed là trình chỉnh sửa luồng được sử dụng để thực hiện chuyển đổi văn bản cơ bản của tệp đầu vào. Lệnh này chủ yếu được sử dụng cho chức năng tìm và thay thế. Chúng tôi cũng có thể sử dụng nó để tìm số dòng của một tệp được chỉ định

sed có thể nhận các đối số khác nhau để in số dòng

4. 1. sed -n ‘=’

Chúng ta có thể sử dụng kết hợp sed, tùy chọn -n và dấu bằng [‘=’]. Lệnh sẽ in số dòng mà không có nội dung của tệp

$ sed -n '=' programming.txt
1
2
3
4
5
6
7
8
9
10

Từ kết quả, chúng ta có thể thấy rằng lệnh chỉ in số dòng. Tuy nhiên, cách tiếp cận này không hiệu quả đối với các tệp lớn

4. 2. sed -n ‘$=’

Hầu hết thời gian, chúng tôi chỉ muốn lấy tổng số dòng. sed hữu ích bằng cách sử dụng tùy chọn -n và đối số ‘$=’. Đầu ra của lệnh là số dòng cuối cùng của tệp

$ sed -n '$=' programming.txt
10

5. awk

Lệnh awk coi mỗi dòng là một bản ghi. Sau đó, số lượng dòng có thể được in trong phần KẾT THÚC bằng cách sử dụng biến NR tích hợp của awk

$ awk 'END { print NR }' programming.txt
10

6. con mèo

Lệnh cat nối các tệp được truyền cho nó dưới dạng đối số và in trên đầu ra tiêu chuẩn. Đây là một trong những lệnh được sử dụng nhiều nhất. Sử dụng lệnh cat với tùy chọn -n in nội dung tệp với số dòng của chúng

$ cat -n programming.txt
     1	JavaScript
     2	Java
     3	C
     4	Python
     5	C#
     6	PHP
     7	C++
     8	Go
     9	R
    10	Ruby

Chúng ta có thể thấy rằng lệnh đã in cả số dòng và nội dung. Lưu ý rằng phương pháp này không thực tế khi xử lý các tệp lớn

7. Phần kết luận

Trong bài viết ngắn này, chúng ta đã học được một số cách đếm số dòng trong một tệp bằng Bash

Một số lệnh in nội dung của tệp trở nên không hiệu quả và không thực tế khi làm việc với các tệp lớn

Lệnh wc -l được sử dụng nhiều nhất và cũng là cách dễ nhất để tìm số dòng của một tệp nhất định

tác giả dưới cùng

Nếu bạn có một vài năm kinh nghiệm trong hệ sinh thái Linux và bạn muốn chia sẻ trải nghiệm đó với cộng đồng, hãy xem Nguyên tắc đóng góp của chúng tôi

Khi bạn gọi phương thức

$ wc -l < programming.txt
10
3 trên một đối tượng tệp, Python sẽ đọc toàn bộ tệp vào bộ nhớ cùng một lúc. Nhưng đó có thể là một ý tưởng tồi nếu bạn đang làm việc với một tệp thực sự lớn

Có một cách phổ biến khác để xử lý tệp trong Python. bạn có thể lặp qua một đối tượng tệp để đọc từng dòng một

________số 8

Ở đây, chúng tôi đang in ra một số [đếm lên] trong mỗi dòng trong tệp của chúng tôi

1 Python Log -- Day 980

2

3 Today I learned about metaclasses.

4 Metaclasses are a class's class.

5 Meaning every class is an instance of a metaclass.

6 The default metaclass is "type".

7

8 Classes control features [like string representations] of all their instances.

9 Metaclasses can control similar features for their classes.

10

11 I doubt I'll ever need to make a metaclass, at least not for production code.

Lưu ý rằng khi chúng tôi in, Python không chỉ in ra dòng mà còn thêm một dòng trống ở giữa mỗi dòng trong tệp của chúng tôi. Theo mặc định, hàm

>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
0 của Python in một ký tự dòng mới [
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
1] sau bất kỳ ký tự nào khác mà nó in [xem đối số
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
3 của hàm
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
0]. Nhưng mỗi dòng của chúng tôi cũng kết thúc bằng một ký tự xuống dòng, bởi vì các ký tự xuống dòng là những dòng riêng biệt trong một tệp

$ wc -l programming.txt
10 programming.txt
4

Loại bỏ ký tự xuống dòng khi đọc từng dòng

Vì vậy, chúng ta cần loại bỏ ký tự xuống dòng mà hàm

>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
0 in ra hoặc chúng ta cần xóa các ký tự xuống dòng khỏi mỗi dòng trong tệp của mình khi chúng ta in chúng ra

$ wc -l programming.txt
10 programming.txt
6

Chúng tôi đang sử dụng phương pháp chuỗi

>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
5 ở đây để "tước" các ký tự dòng mới từ phía bên trái [phần đầu] của mỗi chuỗi
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
6 của chúng tôi ngay trước khi in mỗi dòng

Các đối tượng tệp là các lần lặp lười biếng

Các đối tượng tệp trong Python là các lần lặp lười biếng, có nghĩa là chúng ta có thể xử lý chúng theo cách tương tự như bất kỳ lần lặp nào khác

Vì vậy, thay vì đếm ngược theo cách thủ công, chúng ta có thể chuyển đối tượng tệp của mình sang hàm

>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
7 tích hợp. Hàm
>>> filename = "diary980.md"
>>> with open[filename] as diary_file:
..     n = 1
..     for line in diary_file:
..         print[n, line]
..         n += 1
...
7 sau đó có thể thực hiện việc đếm cho chúng ta khi chúng ta lặp

$ wc -l < programming.txt
10
1

Chúng tôi đã xóa hai dòng mã nhưng chúng tôi nhận được đầu ra giống như trước đây

$ wc -l < programming.txt
10
2

Lặp lại các tệp để đọc từng dòng một

Các tệp là các lần lặp lười biếng và khi chúng tôi lặp qua một đối tượng tệp, chúng tôi sẽ nhận được các dòng từ tệp đó

Khi Python đọc từng dòng một tệp, nó không lưu trữ toàn bộ tệp trong bộ nhớ cùng một lúc. Thay vào đó, nó lưu trữ một bộ đệm nhỏ gồm các dòng sắp tới trong tệp đó, vì vậy nó tiết kiệm bộ nhớ hơn

Điều đó có nghĩa là việc lặp qua các tệp theo từng dòng đặc biệt quan trọng nếu bạn đang làm việc với các tệp thực sự lớn

Làm cách nào để đếm số từ trong mỗi dòng của tệp trong Python?

Người dùng phải nhập tên tệp
Tệp được mở bằng hàm open[] ở chế độ đọc
Một vòng lặp for được sử dụng để đọc qua từng dòng trong tệp
Mỗi dòng được chia thành một danh sách các từ sử dụng split[]
Số lượng từ trong mỗi dòng được đếm bằng cách sử dụng len[] và biến đếm được tăng lên

Làm cách nào để đếm số dòng từ và ký tự trong tệp văn bản bằng Python?

Đếm số dòng, từ và chữ cái trong tệp văn bản .
Bộ đếm các dòng được tăng thêm 1
Chuỗi được chia thành các từ bằng cách sử dụng phương pháp tách. Hàm len đếm số từ trong danh sách từ. .
Để bỏ qua ký tự xuống dòng [ '\n' ], chúng tôi xóa ký tự đó bằng phương thức dải

Chủ Đề