Hướng dẫn how do i remove a line that contains a specific string in python? - làm cách nào để xóa một dòng chứa một chuỗi cụ thể trong python?

Hôm nay tôi cần phải hoàn thành một nhiệm vụ tương tự vì vậy tôi đã viết một ý chính để hoàn thành nhiệm vụ dựa trên một số nghiên cứu tôi đã làm. Tôi hy vọng rằng ai đó sẽ thấy điều này hữu ích!

import os

os.system('cls' if os.name == 'nt' else 'clear')

oldfile = raw_input('{*} Enter the file (with extension) you would like to strip domains from: ')
newfile = raw_input('{*} Enter the name of the file (with extension) you would like me to save: ')

emailDomains = ['windstream.net', 'mail.com', 'google.com', 'web.de', 'email', 'yandex.ru', 'ymail', 'mail.eu', 'mail.bg', 'comcast.net', 'yahoo', 'Yahoo', 'gmail', 'Gmail', 'GMAIL', 'hotmail', 'comcast', 'bellsouth.net', 'verizon.net', 'att.net', 'roadrunner.com', 'charter.net', 'mail.ru', '@live', 'icloud', '@aol', 'facebook', 'outlook', 'myspace', 'rocketmail']

print "\n[*] This script will remove records that contain the following strings: \n\n", emailDomains

raw_input("\n[!] Press any key to start...\n")

linecounter = 0

with open(oldfile) as oFile, open(newfile, 'w') as nFile:
    for line in oFile:
        if not any(domain in line for domain in emailDomains):
            nFile.write(line)
            linecounter = linecounter + 1
            print '[*] - {%s} Writing verified record to %s ---{ %s' % (linecounter, newfile, line)

print '[*] === COMPLETE === [*]'
print '[*] %s was saved' % newfile
print '[*] There are %s records in your saved file.' % linecounter

Liên kết đến Gist: EmailStripper.py

Tốt nhất, az

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

Trong hướng dẫn này, chúng tôi sẽ bao gồm một số cách xóa các dòng khỏi tệp văn bản bằng Python. Chúng tôi sẽ thấy 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ẽ bao gồm các ví dụ về việc sử dụng logic tùy chỉnh để giải quyết các vấn đề khó khăn hơn. Không có vấn đề gì nếu chúng tôi làm việc với một tệp văn bản đơn giản hoặc các tệp được phân tách bằng dấu phẩy (CSV) phức tạp hơn, các kỹ thuật này sẽ giúp bạn quản lý dữ liệu của mình.

Hướng dẫn how do i remove a line that contains a specific string in python? - làm cách nào để xóa một dòng chứa một chuỗi cụ thể trong python?

Chúng ta có thể sử dụng Python để xử lý cả các tệp lớn và nhỏ theo cách hiệu quả 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 việc loại bỏ một dòng dựa trên vị trí của nó trong tệp. Bắt đầu với một danh sách các 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ự nó xuất hiện trong danh sách.

Tệp đượ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. & NBSP;

Trong Python, chúng ta có thể sử dụng câu lệnh With để mở các tệp một cách an toàn. Với tệp mở, chúng tôi sẽ sử dụng phương thức readlines () để truy xuất danh sách có chứa nội dung của tệp.with statement to safely open files. With the file open, we’ll employ the readlines() method to retrieve a list containing the file’s contents.

Đó là tất cả để đọc danh sách các tên. Tiếp theo, chúng tôi sẽ sử dụng một câu khác với câu lệnh để mở lại tệp, lần này là ở chế độ ghi. & NBSP;with statement to open the file again, this time in write mode. 

Sử dụng một vòng lặp để lặp lại 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 đạt được dòng chúng tôi muốn xóa, một câu lệnh IF đảm bảo chúng tôi bỏ qua dòng.if statement makes sure we skip the line.

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

  1. Mở tệp ở chế độ đọc
  2. Đọc các tệp nội dung & nbsp;
  3. Mở tệp ở chế độ ghi
  4. Sử dụng một vòng lặp để đọc từng dòng và ghi nó vào tệp
  5. Khi chúng tôi đạt được dòng chúng tôi muốn xóa, bỏ qua nó

Bởi vì chúng tôi sử dụng một python với tuyên bố để xử lý tệp, nên không cần phải đóng nó sau khi chúng tôi hoàn thành. Python chăm sóc điều đó cho chúng tôi.with statement to handle the file, there’s no need to close it after we’re done. Python takes care of that for us.

Tên.txt1 Amina, Waelchi2 Sharon Reynold3 Lilian Hane4 Felicita Howell5 Sallie Senger6 Lucile Schuster7 Emmitt Schuppe8 Rowena Leffler9 Hipolito Batz10 GIA Hill
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 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 tôi trong một hàm, chúng tôi có thể dễ dàng xóa một dòng khỏi một tệp bằng cách gọi Remove_lines () và chuyển tên của tệp và số lượng dòng chúng tôi muốn xóa.

Nếu chúng ta có kế hoạch sử dụng một khối mã python nhiều lần, thì đó là một ý tưởng tốt để bọc nó trong một chức năng. Làm như vậy sẽ tiết kiệm thời gian và năng lượng của chúng tôi.

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

Chúng tôi đã thấy cách xóa nội dung khỏi một tệp dựa trên vị trí dòng của nó. Bây giờ chúng tôi sẽ xem xét 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 vần điệu mẫu giáo, nhưng ai đó đã chơi một chút nghịch ngợm với chúng tôi. Trong một cú đánh mỉa mai, họ đã thêm dòng dòng này, dòng này không thuộc về các tập tin 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 sự nghịch ngợm. & NBSP;

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 tên là ITSY_BITSY.TXT và lưu trữ nội dung của nó trong một biến có tên là dòng.

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 tôi sẽ cần phải xóa các ký tự dòng mới đọc các đường dẫn đến cuối mỗi chuỗi.with statements to open the file. In order to find the matching line, we’ll need to remove the newline characters that readlines() tacks on to the end of every string.

Chúng ta có thể xóa ký tự mới bằng hàm Dải (). Đây là một chức năng tích hợp để loại bỏ các ký tự từ đầu hoặc cuối chuỗi.strip() function. This is a built-in function that removes characters from the beginning or end of a string.

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

ITSY_BITSY.TXTTHE ITSY BITSY SPIDER đã trèo lên Waterspout.Down đã đến mưa và rửa sạch con nhện.
The itsy bitsy spider climbed up the waterspout.
Down came the rain
And washed the spider out.
Out came the sun
This line doesn’t belong
And dried up all the rain
And the itsy bitsy spider climbed up the spout again.

Ví dụ 2: Kết hợp nội dung và xóa nó 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 phù hợp tùy chỉnh để đáp ứng nhu cầu của chúng tôi. Trong các ví dụ sau, chúng tôi sẽ khám phá bằng cách sử dụng logic tùy chỉnh để giải quyết nhiều vấn đề dữ liệu.

Bằng cách điều chỉnh các giải pháp của chúng tôi, nó 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 ta muốn xóa một dòng khỏi một 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 chúng ta cần xóa. Bằng cách tận dụng các phương pháp tích hợp Python, chúng tôi sẽ thấy cách giải quyết các thách thức tùy chỉnh với mã Python.

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

Trong bài tập tiếp theo, chúng tôi sẽ thấy cách loại bỏ 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, nó có thể xóa một dòng chứa A & NBSP;

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ỉ mục đại diện cho vị trí của nó. Nếu không, phương thức trả về -1.find() method can be used to search a string for a substring. If the string contains the substring, the function returns an index representing its position. Otherwise, the method returns -1.

Trong một tệp văn bản có tên fators.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.

By & nbsp; Sử dụng Find (), chúng tôi sẽ biết nếu một dòng chứa chuỗi mà chúng tôi đang tìm kiếm. Nếu có, chúng tôi sẽ xóa nó khỏi tệp.

Tại đây, cú pháp để sử dụng Find ():find():

mystring.find(substring)

Tuyên bố.txthe đã không chú ý đến cảnh báo về người bạn chuối. Tôi đã đưa những quả táo ra chợ. Anh ấy đã mua một trang trại phát triển đào. Có một vườn nho đáng yêu bên ngoài những ngọn đồi.
He didn’t heed the warning about the banana.
My friend took the apples to the market.
She bought a farm that grows peaches.
There is a lovely grape orchard beyond the hills.
She’s absolutely nuts about her new car.

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 xét một cái nhìn khác về statement.txt. Một số thay đổi đã được thực hiện.

tuyên bố.txthe không chú ý đến cảnh báo về chuối. Người bạn của tôi đã đưa những quả táo ra thị trường. Anh ấy đã mua một trang trại phát triển đào. Ông tuyên bố đã nhìn thấy một UFO. Ít ăn trên đảo bên cạnh dừa.
He didn’t heed the warning about the Banana.
My friend took the apples to the market.
She bought a farm that grows peaches.
He claims to have seen a UFO.
There is a lovely grape orchard beyond the hills.
There was little to eat on the island besides coconuts.

Chúng tôi đã thêm một số dòng mới. Lần này, chúng ta cần loại bỏ 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.len() method to find the length of each line.

Bằng cách so sánh độ dài của các dòng, nó có thể tìm thấy đường ngắn nhất. Sau đó, chúng ta có thể sử dụng một câu lệnh mở và xóa dòng khỏi tệp.with statement open and remove the line from the file.

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 thức xóa các dòng khỏi các 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 một tệp bằng cách sử dụng một vòng lặp.

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

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

Bài viết liên quan

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

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

Khuyến nghị đào tạo Python

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 hướng dẫn cho người mới bắt đầu. Tìm hiểu làm thế nào để tạo các ứng dụng trong thế giới thực và làm chủ những điều cơ bản.

Làm thế nào để bạn loại bỏ một dòng khỏi một chuỗi trong Python?

Xóa các dòng khớp với một văn bản (chuỗi)..
Đọc tệp vào một danh sách ..
Mở cùng một tệp trong chế độ ghi ..
Lặp lại một danh sách và ghi từng dòng vào một tệp ngoại trừ các dòng khớp với chuỗi đã cho ..

Làm cách nào để loại bỏ một số mục từ một chuỗi trong Python?

Trong Python, bạn có thể sử dụng các phương thức thay thế () và dịch () để chỉ định ký tự nào bạn muốn xóa khỏi chuỗi và trả về kết quả chuỗi được sửa đổi mới.Điều quan trọng cần nhớ là chuỗi ban đầu sẽ không bị thay đổi vì chuỗi là bất biến.use the replace() and translate() methods to specify which characters you want to remove from the string and return a new modified string result. It is important to remember that the original string will not be altered because strings are immutable.

Làm cách nào để xóa một dòng cụ thể?

Xóa các dòng hoặc đầu nối Nhấp vào dòng, đầu nối hoặc hình dạng mà bạn muốn xóa, sau đó nhấn xóa.Mẹo: Nếu bạn muốn xóa nhiều dòng hoặc đầu nối, chọn dòng đầu tiên, nhấn và giữ CTRL trong khi bạn chọn các dòng khác, sau đó nhấn Delete.Click the line, connector, or shape that you want to delete, and then press Delete. Tip: If you want to delete multiple lines or connectors, select the first line, press and hold Ctrl while you select the other lines, and then press Delete.