Python xóa dòng đầu tiên khỏi chuỗi

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

Python xóa dòng đầu tiên khỏi chuỗi

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

# remove the shortest line from statements.txt
with open("statements.txt",'r') as read_file:
    lines = read_file.readlines()

shortest = 1000 # used to compare line length
lineToDelete = "" # the line we want to remove

for line in lines:
    if len(line) < shortest:
        shortest = len(line)
        lineToDelete = line

with open("statements.txt",'w') as write_file:
    for line in lines:
        if line == lineToDelete:
            pass
        else:
            write_file.write(line)

Bản tóm tắt

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

Khóa học. 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