Xóa các dòng khỏi tệp python

Đôi khi bạn có thể cần xóa các dòng khỏi tệp. Nếu bạn đang sử dụng Linux, thì bạn có thể dễ dàng thực hiện việc này bằng lệnh sed/awk. Nhưng nếu bạn không sử dụng Linux hoặc muốn thực hiện việc này từ bên trong ứng dụng hoặc trang web của mình, thì việc này có thể khá tẻ nhạt. Trong bài viết này, chúng ta sẽ tìm hiểu cách xóa dòng khỏi tệp bằng Python


Cách xóa dòng khỏi tệp bằng Python

Chúng ta sẽ xem xét hai trường hợp sử dụng để xóa dòng khỏi tệp bằng python – một trường hợp không xác định được chỉ mục dòng và trường hợp còn lại là chỉ mục đã biết


1. Vị trí của dòng bị xóa không xác định

Trong trường hợp này, vị trí của dòng bị xóa không được biết nên trước tiên chúng tôi mở tệp bằng lệnh open() và đọc nội dung của nó vào danh sách python bằng hàm readlines()

Sau đó, chúng tôi đóng và mở lại tệp, để lặp qua từng dòng một. Ta kiểm tra từng dòng xem có phải dòng cần xóa không và dùng hàm write() để ghi tất cả các dòng trừ dòng cần xóa. Giả sử bạn có mẫu tệp sau. txt

line1
line2
line3

Đây là mã để xóa dòng chứa chuỗi 'line2'

#get list of lines
a_file = open("sample.txt", "r")


lines = a_file.readlines()
a_file.close()

new_file = open("sample.txt", "w")
for line in lines:

    #delete line matching string
    if line.strip("\n") != "line2":
        new_file.write(line)

new_file.close()

Bây giờ nếu bạn in nội dung tệp, bạn sẽ thấy như sau

line1
line3


2. Đã biết vị trí của Dòng cần xóa

Trong trường hợp này, một lần nữa chúng tôi đọc nội dung tệp vào danh sách bằng cách sử dụng readlines(). Nhưng vì chúng ta biết vị trí của dòng cần xóa, chúng ta sử dụng lệnh del và vị trí dòng (dưới dạng chỉ mục danh sách) để xóa mục danh sách khỏi danh sách. Sau đó, chúng tôi ghi lại danh sách cập nhật vào tệp. Đây là mã mẫu để xóa dòng số 2 là chỉ mục danh sách 1

#get list of lines
a_file = open("sample.txt", "r")

lines = a_file.readlines()
a_file.close()

#delete lines
del lines[1]

#write file without line
new_file = open("sample.txt", "w+")

for line in lines:
    new_file.write(line)

new_file.close()

Trong bài viết này, chúng ta đã học cách xóa dòng khỏi tệp bằng python. Như bạn có thể thấy, nó yêu cầu chúng ta mở tệp hai lần vì ở cuối lần mở đầu tiên, con trỏ tệp đến cuối tệp. Vì vậy, bạn cần đóng tệp và mở lại để có thể viết từng cái một

Bởi vì Python không cung cấp phương thức trực tiếp để xóa một dòng cụ thể trong một tệp, nên chúng ta cần phải tìm cách tiếp cận của riêng mình

Trong hướng dẫn này, chúng tôi sẽ đề cập đến một số cách xóa dòng khỏi tệp văn bản bằng Python. Chúng ta sẽ xem cách xóa các dòng dựa trên vị trí của chúng trong tài liệu và cách xóa nội dung khớp với một chuỗi

Chúng tôi cũng sẽ đề cập đến các ví dụ về cách sử dụng logic tùy chỉnh để giải quyết các vấn đề khó khăn hơn. Không thành vấn đề nếu chúng ta đang làm việc với một tệp văn bản đơn giản hay các tệp được phân tách bằng dấu phẩy (CSV) phức tạp hơn, những kỹ thuật này sẽ giúp bạn quản lý dữ liệu của mình

Xóa các dòng khỏi tệp python

Chúng ta có thể sử dụng Python để xử lý cả tệp lớn và tệp nhỏ theo cách hiệu quả về bộ nhớ

Sử dụng một số để xóa một dòng

Trong ví dụ đầu tiên của chúng tôi, chúng tôi sẽ xem xét xóa một dòng dựa trên vị trí của nó trong tệp. Bắt đầu với danh sách tên được tạo ngẫu nhiên được lưu trên máy tính của chúng tôi, chúng tôi sẽ sử dụng Python để xóa tên khỏi danh sách dựa trên thứ tự xuất hiện trong danh sách

Các tập tin được gọi là tên. txt và nó được lưu trong cùng thư mục với tệp python của chúng tôi. Mục tiêu của chúng tôi là xóa dòng thứ 7 trong tệp.  

Trong Python, chúng ta có thể sử dụng câu lệnh with để mở tệp một cách an toàn. Khi tệp đang mở, chúng tôi sẽ sử dụng phương thức readlines() để truy xuất danh sách chứa nội dung của tệp

Đó là tất cả để đọc danh sách tên. Tiếp theo, chúng ta sẽ sử dụng một câu lệnh with khác để mở lại tệp, lần này ở chế độ ghi.  

Sử dụng vòng lặp for để lặp qua các dòng của tệp, chúng tôi cũng sử dụng một biến để theo dõi số dòng hiện tại. Khi chúng tôi đến dòng chúng tôi muốn xóa, câu lệnh if đảm bảo chúng tôi bỏ qua dòng

Hãy đi qua các bước một lần nữa

  1. Mở tệp ở chế độ đọc
  2. Đọc nội dung tập tin
  3. Mở tệp ở chế độ ghi
  4. Sử dụng vòng lặp for để đọc từng dòng và ghi vào tệp
  5. Khi đến dòng muốn xóa thì bỏ qua

Bởi vì chúng tôi đang sử dụng câu lệnh Python with để xử lý tệp, nên không cần phải đóng tệp sau khi chúng tôi thực hiện xong. Python chăm sóc điều đó cho chúng tôi

tên. txt
1 Amina,Waelchi
2 Sharon Reynolds
3 Lilian Hane
4 Felicita Howell
5 Sallie Senger
6 Lucile Schuster
7 Emmitt Schuppe
8 Rowena Leffler
9 Hipolito Batz
10 Gia Hill

ví dụ 1. Xóa một dòng dựa trên một số dòng được chỉ định

def remove_line(fileName,lineToSkip):
    """ Removes a given line from a file """
    with open(fileName,'r') as read_file:
        lines = read_file.readlines()

    currentLine = 1
    with open(fileName,'w') as write_file:
        for line in lines:
            if currentLine == lineToSkip:
                pass
            else:
                write_file.write(line)
	
            currentLine += 1

# call the function, passing the file and line to skip
remove_line("names.txt",7)

Bằng cách gói logic của chúng ta trong một hàm, chúng ta có thể dễ dàng xóa một dòng khỏi tệp bằng cách gọi hàm remove_lines() và chuyển tên của tệp cũng như số dòng mà chúng ta muốn xóa

Nếu chúng ta dự định sử dụng một khối mã Python nhiều lần, thì tốt nhất là bọc nó trong một hàm. Làm như vậy sẽ giúp chúng ta tiết kiệm thời gian và năng lượng

Xóa một dòng bằng cách khớp nội dung

Chúng tôi đã xem cách xóa nội dung khỏi tệp dựa trên vị trí dòng của nó. Bây giờ chúng ta sẽ xem cách xóa một dòng khớp với một chuỗi đã cho

Chúng tôi có một danh mục các bài đồng dao, nhưng ai đó đã chơi xấu chúng tôi một chút. Thật trớ trêu, họ đã thêm dòng "Dòng này không thuộc về" vào tệp của chúng tôi

Không cần phải hoảng sợ. Chúng ta có thể sử dụng Python để dễ dàng hoàn tác trò nghịch ngợm.  

Trong mã Python của chúng tôi, chúng tôi sẽ bắt đầu bằng cách đọc tệp có tên ity_bitsy. txt và lưu trữ nội dung của nó trong một biến có tên là lines

Giống như trong ví dụ trước, chúng tôi sẽ sử dụng Python với các câu lệnh để mở tệp. Để tìm dòng phù hợp, chúng ta cần xóa các ký tự xuống dòng mà readlines() gắn vào cuối mỗi chuỗi

Chúng ta có thể xóa ký tự xuống dòng bằng hàm strip(). Đây là một chức năng tích hợp giúp xóa các ký tự ở đầu hoặc cuối chuỗi

Khi tìm thấy nội dung phù hợp, chúng tôi sẽ sử dụng câu lệnh if để chuyển nội dung đó qua, loại bỏ nội dung đó khỏi tệp cũ một cách hiệu quả

itsy_bitsy. txt
Con nhện nhỏ bé xíu trèo lên vòi rồng.
Mưa đổ xuống
Và cuốn trôi con nhện.
Mặt trời ló dạng
Dòng này không thuộc về
Và làm khô cả mưa
And the itsy bitsy spider climbed up the spout again.

ví dụ 2. Khớp nội dung và xóa nội dung khỏi tệp

with open("itsy_bitsy.txt", 'r') as file:
    lines = file.readlines()

# delete matching content
content = "This line doesn't belong"
with open("itsy_bitsy.txt", 'w') as file:
    for line in lines:
        # readlines() includes a newline character
        if line.strip("\n") != content:
            file.write(line)

Sử dụng Logic tùy chỉnh để xóa một dòng trong Python

Khi xử lý dữ liệu tệp, chúng tôi thường cần các giải pháp tùy chỉnh phù hợp để đáp ứng nhu cầu của mình. Trong các ví dụ sau, chúng ta sẽ khám phá cách sử dụng logic tùy chỉnh để giải quyết nhiều vấn đề về dữ liệu

Bằng cách điều chỉnh các giải pháp của chúng tôi, có thể giải quyết các vấn đề khó khăn hơn. Ví dụ: điều gì sẽ xảy ra nếu chúng tôi muốn xóa một dòng khỏi tệp nhưng chỉ biết một phần của nó?

Ngay cả khi chúng ta chỉ biết một từ duy nhất, chúng ta có thể sử dụng Python để tìm dòng cần xóa. Bằng cách tận dụng các phương thức tích hợp sẵn của Python, chúng ta sẽ xem cách giải quyết các thách thức tùy chỉnh bằng mã Python

Xóa một dòng bằng một chuỗi cụ thể

Trong bài tập tiếp theo, chúng ta sẽ xem cách xóa một dòng chứa một phần của chuỗi. Dựa trên kiến ​​thức thu được từ các ví dụ trước, có thể xóa một dòng chứa chuỗi con đã cho

Trong Python, phương thức find() có thể được sử dụng để tìm kiếm một chuỗi cho một chuỗi con. Nếu chuỗi chứa chuỗi con, hàm trả về một chỉ số đại diện cho vị trí của nó. Nếu không, phương thức trả về -1

Trong một tệp văn bản có tên là báo cáo. txt, chúng tôi có một danh sách các câu được tạo ngẫu nhiên. Chúng ta cần loại bỏ bất kỳ câu nào chứa chuỗi con đã cho

Bằng cách sử dụng find(), chúng tôi sẽ biết liệu một dòng có chứa chuỗi mà chúng tôi đang tìm kiếm hay không. Nếu có, chúng tôi sẽ xóa nó khỏi tệp

Đây là cú pháp sử dụng find()

mystring.find(substring)

câu lệnh. txt
Anh ấy không chú ý đến cảnh báo về quả chuối.
Bạn tôi mang táo ra chợ.
Cô ấy mua một trang trại trồng đào.
Có một vườn nho xinh xắn bên kia những ngọn đồi.
Cô ấy cực kỳ thích thú với chiếc xe mới của mình.

ví dụ 3. Xóa một dòng chứa một chuỗi đã cho

# remove a line containing a string
with open("statements.txt",'r') as file:
    lines = file.readlines()

with open("statements.txt",'w') as file:
    for line in lines:
        # find() returns -1 if no match is found
        if line.find("nuts") != -1:
            pass
        else:
            file.write(line)

Xóa dòng ngắn nhất trong tệp

Hãy cùng xem lại câu lệnh. txt. Một số thay đổi đã được thực hiện.

câu lệnh. txt
Anh ấy không chú ý đến cảnh báo về Banana.
Bạn tôi mang táo ra chợ.
Cô ấy mua một trang trại trồng đào.
Anh ta tuyên bố đã nhìn thấy UFO.
Có một vườn nho xinh xắn bên kia những ngọn đồi.
Có rất ít thứ để ăn trên đảo ngoài dừa.

Chúng tôi đã thêm một số dòng mới. Lần này, chúng ta cần xóa dòng ngắn nhất trong tài liệu. Chúng ta có thể làm điều này bằng cách sử dụng phương thức len() để tìm độ dài của mỗi dòng.

Bằng cách so sánh độ dài của các dòng, bạn có thể tìm ra dòng ngắn nhất. Sau đó, chúng ta có thể sử dụng câu lệnh with open và xóa dòng khỏi tệp.

Ví dụ 4. Xóa dòng ngắn nhất trong tệp bằng phương thức len()

________số 8

Tóm lược

Với bài đăng này, chúng tôi đã đề cập đến một số phương pháp xóa dòng khỏi tệp trong Python. Chúng tôi đã thấy rằng chúng tôi có thể xóa các dòng dựa trên vị trí của chúng trong tệp bằng cách sử dụng vòng lặp for

Chúng tôi cũng có thể xóa các tệp khớp với nội dung bằng cách so sánh các chuỗi, bằng toán tử == hoặc bằng cách sử dụng phương thức find()

Đây chỉ là một số cách người ta có thể xóa các dòng khỏi tệp trong Python

bài viết liên quan

Nếu bạn muốn tìm hiểu thêm về cách làm việc với chuỗi và dữ liệu tệp trong Python, hãy truy cập vào các liên kết bên dưới

  • Tham gia chuỗi với nối chuỗi Python
  • Cách sử dụng từ điển Python để quản lý dữ liệu tốt hơn
  • Sử dụng hiểu danh sách Python để hợp lý hóa mã của bạn

Có liên quan

Đào tạo Python được đề xuất

Món ăn. Python 3 cho người mới bắt đầu

Hơn 15 giờ nội dung video với hướng dẫn có hướng dẫn cho người mới bắt đầu. Tìm hiểu cách tạo các ứng dụng trong thế giới thực và nắm vững kiến ​​thức cơ bản