Làm thế nào để bạn gọi một dòng cụ thể trong một tệp trong python?

Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách xóa một dòng cụ thể/cụ thể khỏi tệp văn bản bằng python

Giả sử chúng tôi đã lấy một tệp văn bản có tên TextFile. txt bao gồm một số văn bản ngẫu nhiên. Chúng tôi sẽ xóa một dòng cụ thể (ví dụ dòng 2) khỏi tệp văn bản

Tệp văn bản. txt

Good Morning
This is Tutorials Point sample File
Consisting of Specific
source codes in Python,Seaborn,Scala
Summary and Explanation
Welcome everyone
Learn with a joy

thuật toán

Sau đây là Thuật toán/các bước cần tuân thủ để thực hiện tác vụ mong muốn -

  • Tạo một biến để lưu đường dẫn của tệp văn bản

  • Sử dụng hàm open()(mở một tệp và kết quả là trả về một đối tượng tệp) để mở tệp văn bản ở chế độ chỉ đọc bằng cách chuyển tên tệp và chế độ làm đối số cho nó (Ở đây “r” biểu thị chỉ đọc

with open(inputFile, 'r') as filedata:
  • Sử dụng hàm readlines() (trả về một danh sách với mỗi dòng trong tệp được biểu thị dưới dạng một mục danh sách. Để giới hạn số dòng được trả về, hãy sử dụng đối số gợi ý. Không còn dòng nào được trả về nếu tổng số byte được trả về vượt quá số lượng đã chỉ định) để lấy danh sách các dòng của tệp văn bản đầu vào đã cho

file.readlines(hint)
  • Tạo một biến (giữ số dòng) và khởi tạo giá trị của nó thành 1

  • Sử dụng hàm open()(mở một tệp và kết quả trả về một đối tượng tệp) để mở tệp văn bản đã cho ở chế độ ghi bằng cách chuyển tên tệp và chế độ làm đối số cho nó (Ở đây “w” đại diện cho chế độ ghi)

with open(inputFile, 'w') as filedata:
  • Duyệt qua từng dòng của tệp bằng vòng lặp for

  • Nhập số dòng cần xóa dưới dạng đầu vào động bằng cách sử dụng hàm input() (Hàm input() đọc một dòng từ đầu vào (từ người dùng), chuyển đổi nó thành một chuỗi bằng cách loại bỏ dòng mới ở cuối và trả về nó. Khi gặp phải EOF, một ngoại lệ EOFError sẽ được đưa ra) và nhập truyền nó thành một số nguyên bằng hàm int()(chuyển đổi thành một số nguyên)

  • Sử dụng câu lệnh điều kiện if, xác định xem chỉ mục dòng (số dòng) có khác với số dòng xóa đã cho hay không

  • Nếu điều kiện là đúng, thì hãy sử dụng hàm write() (ghi một văn bản đã chỉ định vào một tệp. Văn bản được cung cấp sẽ được chèn tùy thuộc vào chế độ tệp và vị trí luồng) để ghi dòng tương ứng đó vào một tệp

  • Tăng giá trị của giá trị chỉ mục dòng (số dòng) lên 1

  • In một số văn bản ngẫu nhiên nếu dòng cụ thể đã được xóa thành công

  • Mở lại tệp đầu vào ở chế độ đọc bằng hàm open() để in nội dung tệp sau khi xóa dòng cụ thể đã cho

  • Duyệt qua từng dòng của tệp bằng vòng lặp for

  • In từng dòng của tệp văn bản

  • Đóng tệp đầu vào bằng hàm close() (dùng để đóng tệp đã mở)

Thí dụ

Chương trình sau để xóa một dòng đã cho khỏi tệp văn bản và in nội dung tệp kết quả sau khi xóa dòng đó -

đầu ra

Khi thực thi, chương trình trên sẽ tạo đầu ra sau -

Enter the line number to be deleted = 2
Line 2 is deleted successfully

File Content After Deletion :
Good Morning
Consisting of Specific
source codes in Python,Seaborn,Scala
Summary and Explanation
Welcome everyone
Learn with a joy

Chúng tôi đã cung cấp cho chương trình của mình một tệp văn bản chứa một số nội dung ngẫu nhiên và sau đó mở nó ở chế độ đọc. Chúng tôi đã tạo một biến để lưu trữ số dòng hiện tại và khởi tạo nó thành 1, số dòng bắt đầu. Chúng tôi duyệt qua tệp cho đến khi đến cuối, sau đó kiểm tra xem số đầu vào của người dùng có tương đương với số dòng sẽ bị xóa không. Nếu sai ta không cần xóa bỏ dòng đó mà ghi vào file. Thay vì xóa dòng đã chỉ định, chúng tôi thêm các dòng còn lại vào tệp, do đó dòng bị xóa không xuất hiện trong tệp kết quả. Đối với mỗi dòng, giá trị của số dòng được tăng thêm một

Trong bài viết này, chúng ta đã tìm hiểu về cách xóa một dòng cụ thể khỏi tệp văn bản và lưu các dòng còn lại trong cùng một bài viết. Cùng với đó chúng ta đã học về cách duyệt toàn bộ tệp văn bản từ đầu đến cuối cũng như cách đọc và ghi dữ liệu vào tệp văn bản

Một nhiệm vụ phổ biến trong lập trình là mở tệp và phân tích nội dung của nó. Bạn sẽ làm gì khi tệp bạn đang cố xử lý khá lớn, chẳng hạn như vài GB dữ liệu hoặc lớn hơn? . Mặc dù tùy thuộc vào bạn để xác định kích thước phù hợp cho các khối dữ liệu bạn đang xử lý, nhưng đối với nhiều ứng dụng, việc xử lý một tệp tại một thời điểm là phù hợp

Trong suốt bài viết này, chúng tôi sẽ đề cập đến một số ví dụ mã minh họa cách đọc tệp theo từng dòng. Trong trường hợp bạn muốn tự mình thử một số ví dụ này, bạn có thể tìm thấy mã được sử dụng trong bài viết này tại repo GitHub sau

Tệp IO cơ bản trong Python

Python là một ngôn ngữ lập trình có mục đích chung tuyệt vời và nó có một số chức năng IO tệp rất hữu ích trong thư viện tiêu chuẩn gồm các hàm và mô-đun tích hợp sẵn

Hàm

fp.close()
1 tích hợp sẵn là thứ bạn sử dụng để mở một đối tượng tệp cho mục đích đọc hoặc ghi. Đây là cách bạn có thể sử dụng nó để mở một tập tin

fp = open('path/to/file.txt', 'r')

Như đã trình bày ở trên, hàm

fp.close()
1 nhận nhiều đối số. Chúng tôi sẽ tập trung vào hai đối số, với đối số đầu tiên là tham số chuỗi vị trí biểu thị đường dẫn đến tệp bạn muốn mở. Tham số thứ hai (tùy chọn) cũng là một chuỗi và nó chỉ định chế độ tương tác mà bạn định sử dụng trên đối tượng tệp được trả về bởi lệnh gọi hàm. Các chế độ phổ biến nhất được liệt kê trong bảng bên dưới, với chế độ mặc định là 'r' để đọc

Chế độ Mô tả
fp.close()
3Mở để đọc văn bản thuần túy
fp.close()
4Mở để viết văn bản thuần túy
fp.close()
5Mở tệp hiện có để nối thêm văn bản thuần túy
fp.close()
6Mở để đọc dữ liệu nhị phân
fp.close()
7Mở để ghi dữ liệu nhị phân

Khi bạn đã viết hoặc đọc tất cả dữ liệu mong muốn trong một đối tượng tệp, bạn cần đóng tệp để tài nguyên có thể được phân bổ lại trên hệ điều hành mà mã đang chạy trên đó

fp.close()

Làm thế nào để bạn gọi một dòng cụ thể trong một tệp trong python?

Ghi chú. Việc đóng tài nguyên đối tượng tệp luôn là một phương pháp hay, nhưng đó là một nhiệm vụ rất dễ quên

Mặc dù bạn luôn có thể nhớ gọi

fp.close()
8 trên một đối tượng tệp, nhưng có một cách thay thế và thanh lịch hơn để mở một đối tượng tệp và đảm bảo rằng trình thông dịch Python sẽ dọn sạch sau khi sử dụng

Chỉ cần sử dụng từ khóa

fp.close()
9 (được giới thiệu trong Python 2. 5) đối với mã chúng tôi sử dụng để mở một đối tượng tệp, Python sẽ làm điều gì đó tương tự như mã sau. Điều này đảm bảo rằng bất kể đối tượng tệp nào được đóng sau khi sử dụng

Một trong hai phương pháp này đều phù hợp, với ví dụ đầu tiên là Pythonic hơn

Đối tượng tệp được trả về từ hàm

fp.close()
1 có ba phương thức rõ ràng phổ biến (
with open(inputFile, 'r') as filedata:
71,
with open(inputFile, 'r') as filedata:
72 và
with open(inputFile, 'r') as filedata:
73) để đọc dữ liệu. Phương thức
with open(inputFile, 'r') as filedata:
71 đọc tất cả dữ liệu thành một chuỗi. Điều này hữu ích cho các tệp nhỏ hơn mà bạn muốn thực hiện thao tác văn bản trên toàn bộ tệp. Sau đó, có
with open(inputFile, 'r') as filedata:
72, đây là một cách hữu ích để chỉ đọc từng dòng riêng lẻ, với số lượng tăng dần tại một thời điểm và trả về chúng dưới dạng chuỗi. Phương thức rõ ràng cuối cùng,
with open(inputFile, 'r') as filedata:
73, sẽ đọc tất cả các dòng của tệp và trả về chúng dưới dạng danh sách các chuỗi

Ghi chú. Trong phần còn lại của bài viết này, chúng ta sẽ làm việc với văn bản của cuốn sách "Iliad of Homer", có thể tìm thấy tại gutenberg. org, cũng như trong repo GitHub chứa mã cho bài viết này

Đọc từng dòng tệp trong Python với readline()

Hãy bắt đầu với phương thức

with open(inputFile, 'r') as filedata:
72, phương thức đọc một dòng, phương thức này sẽ yêu cầu chúng ta sử dụng bộ đếm và tăng nó

with open(inputFile, 'r') as filedata:
7

Đoạn mã này mở một đối tượng tệp có tham chiếu được lưu trữ trong

with open(inputFile, 'r') as filedata:
78, sau đó đọc từng dòng một bằng cách gọi
with open(inputFile, 'r') as filedata:
72 trên đối tượng tệp đó lặp đi lặp lại trong một vòng lặp
file.readlines(hint)
70. Sau đó, nó chỉ cần in dòng ra bàn điều khiển

Chạy mã này, bạn sẽ thấy một cái gì đó như sau

file.readlines(hint)
7

Mặc dù, cách tiếp cận này là thô và rõ ràng. Chắc chắn không phải là rất Pythonic. Chúng ta có thể sử dụng phương pháp

with open(inputFile, 'r') as filedata:
73 để làm cho mã này ngắn gọn hơn nhiều

Đọc từng dòng tệp với readlines()

Phương thức

with open(inputFile, 'r') as filedata:
73 đọc tất cả các dòng và lưu trữ chúng vào một
file.readlines(hint)
73. Sau đó, chúng tôi có thể lặp lại danh sách đó và sử dụng
file.readlines(hint)
74, tạo chỉ mục cho từng dòng để thuận tiện cho chúng tôi

with open(inputFile, 'w') as filedata:
3

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Kết quả này trong

with open(inputFile, 'w') as filedata:
4

Bây giờ, mặc dù tốt hơn nhiều, chúng ta thậm chí không cần gọi phương thức

with open(inputFile, 'r') as filedata:
73 để đạt được chức năng tương tự. Đây là cách truyền thống để đọc từng dòng một tệp, nhưng có một cách hiện đại hơn, ngắn hơn

Đọc từng dòng tệp bằng vòng lặp for - Cách tiếp cận Pythonic nhất

Bản thân

file.readlines(hint)
76 được trả về là một lần lặp. Chúng tôi hoàn toàn không cần trích xuất các dòng qua
with open(inputFile, 'r') as filedata:
73 - chúng tôi có thể tự lặp lại đối tượng được trả về. Điều này cũng làm cho nó dễ dàng để viết số dòng trong mỗi câu lệnh
file.readlines(hint)
79

Đây là cách tiếp cận ngắn nhất, Pythonic nhất để giải quyết vấn đề và cách tiếp cận được hầu hết mọi người ưa chuộng.

Enter the line number to be deleted = 2
Line 2 is deleted successfully

File Content After Deletion :
Good Morning
Consisting of Specific
source codes in Python,Seaborn,Scala
Summary and Explanation
Welcome everyone
Learn with a joy
0

Kết quả này trong

Enter the line number to be deleted = 2
Line 2 is deleted successfully

File Content After Deletion :
Good Morning
Consisting of Specific
source codes in Python,Seaborn,Scala
Summary and Explanation
Welcome everyone
Learn with a joy
1

Ở đây, chúng ta đang tận dụng các chức năng tích hợp sẵn của Python cho phép chúng ta lặp lại dễ dàng trên một đối tượng có thể lặp lại, chỉ cần sử dụng vòng lặp

with open(inputFile, 'w') as filedata:
30. Nếu bạn muốn đọc thêm về các chức năng tích hợp sẵn của Python trên các đối tượng lặp, chúng tôi đã giới thiệu cho bạn

Làm thế nào bạn có thể sử dụng điều này thực tế? . Hầu hết thời gian, sẽ không khôn ngoan nếu đọc toàn bộ kho ngữ liệu vào bộ nhớ. Mặc dù thô sơ, bạn có thể viết một giải pháp từ đầu để đếm tần suất của một số từ nhất định mà không cần sử dụng bất kỳ thư viện bên ngoài nào. Hãy viết một tập lệnh đơn giản tải vào một tệp, đọc từng dòng một và đếm tần suất xuất hiện của các từ, in ra 10 từ thường xuyên nhất và số lần xuất hiện của chúng

Enter the line number to be deleted = 2
Line 2 is deleted successfully

File Content After Deletion :
Good Morning
Consisting of Specific
source codes in Python,Seaborn,Scala
Summary and Explanation
Welcome everyone
Learn with a joy
3

Tập lệnh sử dụng mô-đun

with open(inputFile, 'w') as filedata:
31 để đảm bảo rằng tệp chúng tôi đang cố đọc thực sự tồn tại. Nếu vậy, nó sẽ đọc từng dòng và mỗi dòng được chuyển vào hàm
with open(inputFile, 'w') as filedata:
32. Nó phân định khoảng trắng giữa các từ và thêm từ đó vào từ điển -
with open(inputFile, 'w') as filedata:
33. Sau khi tất cả các dòng được ghi vào từ điển, chúng tôi sắp xếp nó qua
with open(inputFile, 'w') as filedata:
34 trả về danh sách các bộ dữ liệu ở định dạng
with open(inputFile, 'w') as filedata:
35, được sắp xếp theo số lượng từ

Cuối cùng, chúng tôi in mười từ phổ biến nhất

Thông thường, đối với điều này, bạn sẽ tạo Mô hình Túi từ, sử dụng các thư viện như NLTK, tuy nhiên, việc triển khai này sẽ đủ. Hãy chạy tập lệnh và cung cấp

with open(inputFile, 'w') as filedata:
36 của chúng tôi cho nó

fp.close()
0

Kết quả này trong

fp.close()
0

Sự kết luận

Trong bài viết này, chúng tôi đã khám phá nhiều cách để đọc từng dòng một tệp trong Python, cũng như tạo mô hình Túi từ thô sơ để tính toán tần suất của các từ trong một tệp nhất định