Làm cách nào để xóa các dòng khỏi tệp trong python?

Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để xóa các dòng cụ thể khỏi một tệp theo số dòng, bằng cách khớp nội dung hoặc dựa trên bất kỳ logic tùy chỉnh nào

Trong Python, không có API trực tiếp để xóa các dòng hoặc văn bản ở giữa tệp. Do đó, trong bài viết này, chúng tôi sẽ thực hiện theo cách tiếp cận để xóa các dòng tại các vị trí cụ thể trong tệp i. e. ,

“Sao chép nội dung của tệp đã cho vào tệp tạm thời theo từng dòng và trong khi sao chép, bỏ qua các dòng cụ thể. Cuối cùng, xóa tệp gốc và đổi tên tệp tạm thời thành tệp gốc. ”

Nó sẽ tạo ấn tượng rằng chúng tôi đã xóa các dòng cụ thể khỏi tệp. Tệp này có thể là tệp văn bản đơn giản hoặc tệp CSV. Với phương pháp này, chúng tôi cũng có thể xóa các dòng khỏi các tệp lớn theo cách hiệu quả về bộ nhớ

quảng cáo

Hãy sử dụng logic này và thực hiện các chức năng của chúng ta xung quanh nó,

Xóa một dòng khỏi tệp theo số dòng cụ thể trong python

Ở đây, chúng tôi sẽ triển khai một hàm, chấp nhận tên tệp và số dòng làm đối số. Sau đó, nó xóa dòng tại số dòng được chỉ định đó,

Thuật toán của chức năng sẽ là,

  • Chấp nhận tên tệp gốc và số dòng làm đối số
  • Mở tệp gốc ở chế độ đọc
  • Tạo một tệp tạm thời và mở tệp đó ở chế độ ghi
  • Đọc nội dung từ một tệp gốc theo từng dòng và cho mỗi dòng,
    • Theo dõi số dòng
    • Nếu số dòng khớp với số dòng trong đối số hàm thì bỏ qua dòng đó, nếu không thì thêm dòng vào tệp tạm thời
  • Nếu bất kỳ dòng nào bị bỏ qua trong khi sao chép thì
    • Xóa tệp gốc
    • Đổi tên tệp tạm thời thành tệp gốc
  • Khác
    • Xóa tệp tạm thời

Thực hiện chức năng như sau,

def delete_line[original_file, line_number]:
    """ Delete a line from a file at the given line number """
    is_skipped = False
    current_index = 0
    dummy_file = original_file + '.bak'
    # Open original file in read only mode and dummy file in write mode
    with open[original_file, 'r'] as read_obj, open[dummy_file, 'w'] as write_obj:
        # Line by line copy data from original file to dummy file
        for line in read_obj:
            # If current line number matches the given line number then skip copying
            if current_index != line_number:
                write_obj.write[line]
            else:
                is_skipped = True
            current_index += 1

    # If any line is skipped then rename dummy file as original file
    if is_skipped:
        os.remove[original_file]
        os.rename[dummy_file, original_file]
    else:
        os.remove[dummy_file]

Hàm này giả sử số dòng bắt đầu từ 0 trong tệp. Vì vậy, để xóa dòng ở vị trí thứ n, chúng ta cần chuyển n-1 làm số dòng. Bây giờ hãy sử dụng chức năng này,

Giả sử chúng ta có một tệp 'sample_1. txt’ với nội dung sau,

Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file

Bây giờ, hãy xóa dòng ở dòng số 2 bằng hàm đã tạo ở trên,
delete_line['sample_1.txt', 1]

Bây giờ, . txt’ như sau,
Hello this is a sample file
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file

Dòng thứ 2 của tệp hiện đã bị xóa.

Xóa nhiều dòng khỏi một tệp theo số dòng

Để xóa các dòng khác nhau khỏi một tệp theo số dòng, chúng tôi sẽ sử dụng loại thuật toán tương tự i. e

  • Chấp nhận tên tệp gốc và danh sách số dòng làm đối số
  • Mở tệp gốc ở chế độ đọc
  • Tạo một tệp giả/tạm thời và mở tệp đó ở chế độ ghi
  • Đọc nội dung từ một tệp gốc theo từng dòng và cho mỗi dòng,
    • Theo dõi số dòng
    • Nếu số dòng của dòng hiện tại khớp với số dòng trong danh sách số đã cho, thì bỏ qua dòng đó, nếu không thì thêm dòng vào tệp tạm thời/giả
  • Nếu bất kỳ dòng nào bị bỏ qua trong khi sao chép thì
    • Xóa tệp gốc
    • Đổi tên tệp tạm thời thành tệp gốc
  • Khác
    • Xóa tệp tạm thời

Thực hiện chức năng như sau,

def delete_multiple_lines[original_file, line_numbers]:
    """In a file, delete the lines at line number in given list"""
    is_skipped = False
    counter = 0
    # Create name of dummy / temporary file
    dummy_file = original_file + '.bak'
    # Open original file in read only mode and dummy file in write mode
    with open[original_file, 'r'] as read_obj, open[dummy_file, 'w'] as write_obj:
        # Line by line copy data from original file to dummy file
        for line in read_obj:
            # If current line number exist in list then skip copying that line
            if counter not in line_numbers:
                write_obj.write[line]
            else:
                is_skipped = True
            counter += 1

    # If any line is skipped then rename dummy file as original file
    if is_skipped:
        os.remove[original_file]
        os.rename[dummy_file, original_file]
    else:
        os.remove[dummy_file]

Giả sử chúng ta có tệp 'sample_2. txt' với nội dung như sau,
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file

Hãy sử dụng hàm trên để xóa các dòng ở dòng 1,2,3 khỏi tệp văn bản,
delete_multiple_lines['sample_2.txt', [0,1,2]]

Now, the contents of file ‘sample_2.txt’ is as follows,
Dummy Line B
Dummy Line C
This is the end of file

Nó đã xóa nhiều dòng khỏi tệp. Vì chức năng này mong đợi rằng số dòng bắt đầu từ 0, do đó, để xóa các dòng ở số dòng 1,2,3, chúng tôi đã chuyển 0,1, & 2 làm số dòng trong danh sách.

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

Giả sử thay vì số dòng, chúng tôi muốn xóa một dòng cụ thể khỏi tệp văn bản/tệp CSV khớp hoàn toàn với văn bản đã cho. Để làm điều đó, chúng ta sẽ sử dụng cùng một logic tôi. e

“Sao chép nội dung của tệp đã cho vào một tệp tạm thời từng dòng và trong khi sao chép, đối với mỗi dòng, hãy kiểm tra xem nó có khớp với văn bản đã cho không. Nếu khớp thì bỏ qua dòng đó khi copy. Cuối cùng, xóa tệp gốc và đổi tên tệp tạm thời thành tệp gốc. ”

Chức năng xóa một dòng khỏi tệp khớp với văn bản đã cho như sau,

def delete_line_by_full_match[original_file, line_to_delete]:
    """ In a file, delete the lines at line number in given list"""
    is_skipped = False
    dummy_file = original_file + '.bak'
    # Open original file in read only mode and dummy file in write mode
    with open[original_file, 'r'] as read_obj, open[dummy_file, 'w'] as write_obj:
        # Line by line copy data from original file to dummy file
        for line in read_obj:
            line_to_match = line
            if line[-1] == '\n':
                line_to_match = line[:-1]
            # if current line matches with the given line then skip that line
            if line_to_match != line_to_delete:
                write_obj.write[line]
            else:
                is_skipped = True

    # If any line is skipped then rename dummy file as original file
    if is_skipped:
        os.remove[original_file]
        os.rename[dummy_file, original_file]
    else:
        os.remove[dummy_file]


Giả sử chúng ta có tệp 'sample_3. txt' với nội dung sau,
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file

Hãy sử dụng chức năng trên để xóa dòng có nội dung “Dòng giả B”
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
0 . txt’ như sau,
Now, the contents of file ‘sample.txt’ is as follows,
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
1

Xóa các dòng cụ thể khỏi một tệp phù hợp với các điều kiện đã cho

Trong tất cả các ví dụ trên, chúng tôi đã tuân theo cùng một logic để xóa các dòng khỏi tệp. Điều khác biệt duy nhất là logic để xác định các dòng mà chúng ta cần bỏ qua. Chúng ta có thể di chuyển logic đó ra bên ngoài và làm cho chức năng này trở nên chung chung

Algo của chức năng chung sẽ là,

  • Chấp nhận tên tệp gốc và chức năng gọi lại i. e. điều kiện, tình trạng, trạng thái[]
  • Mở tệp gốc ở chế độ đọc
  • Tạo một tệp tạm thời và mở tệp đó ở chế độ ghi
  • Đọc nội dung từ tệp gốc theo từng dòng và cho từng dòng,
    • Theo dõi số dòng
    • Chuyển dòng trong chức năng gọi lại i. e. condition[] và nếu hàm đó trả về True thì bỏ qua dòng đó trong khi sao chép, nếu không thì sao chép dòng đó vào tệp tạm thời
  • Nếu bất kỳ dòng nào bị bỏ qua trong khi sao chép thì
    • Xóa tệp gốc
    • Đổi tên tệp tạm thời thành tệp gốc
  • Khác
    • Xóa tệp tạm thời

Thực hiện chức năng như sau,

Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
2
Chúng ta có thể sử dụng chức năng này để xóa các dòng cụ thể khỏi tệp. Bây giờ, logic để xác định các dòng cụ thể cần xóa có thể được viết trong một hàm riêng biệt và chúng ta có thể chuyển hàm này làm đối số trong hàm delete_line_by_condition[].

Hãy xem một số ví dụ để xóa các dòng có logic tùy chỉnh bằng hàm đã tạo ở trên,

Xóa các dòng khỏi tệp chứa từ/chuỗi con

Nội dung của tệp 'sample_4. txt' như sau,

Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file

Hãy sử dụng hàm trên để xóa dòng có chứa chuỗi “Dummy”
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
4
Bây giờ . txt’ như sau,
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
5
Chúng tôi đã chuyển logic dưới dạng hàm lambda. Đối với mỗi dòng trong tệp, hàm lambda này đã được gọi và các dòng mà hàm lambda này trả về True, đã bị xóa.

Xóa các dòng ngắn hơn khỏi tệp i. e. các dòng có độ dài nhỏ hơn độ dài tối thiểu

Nội dung của tệp 'sample_5. txt' như sau,

Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file

Hãy sử dụng chức năng trên để xóa các dòng có độ dài nhỏ hơn 15
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
7
Bây giờ, . txt’ như sau,
Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
5
Chúng tôi đã chuyển logic dưới dạng hàm lambda. Đối với mỗi dòng trong tệp, hàm lambda này đã được gọi và các dòng mà hàm lambda này trả về True đã bị xóa.

Ví dụ đầy đủ là,

Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file
9

Hướng dẫn về Pandas -Tìm hiểu Phân tích dữ liệu với Python

 
  • Hướng dẫn Pandas Phần #1 - Giới thiệu về Phân tích dữ liệu với Python
  • Hướng dẫn Pandas Phần #2 - Khái niệm cơ bản về Pandas Series
  • Hướng dẫn Pandas Phần #3 - Nhận & Đặt giá trị Chuỗi
  • Pandas Tutorial Part #4 - Thuộc tính & phương thức của Pandas Series
  • Hướng dẫn về Pandas Phần #5 - Thêm hoặc xóa các thành phần của Pandas Series
  • Hướng dẫn về Pandas Phần #6 - Giới thiệu về DataFrame
  • Hướng dẫn về Pandas Phần #7 - DataFrame. loc[] - Chọn Hàng/Cột theo Lập chỉ mục
  • Hướng dẫn về Pandas Phần #8 - DataFrame. iloc[] - Chọn Hàng/Cột theo Tên nhãn
  • Hướng dẫn về gấu trúc Phần #9 - Lọc các hàng trong khung dữ liệu
  • Hướng dẫn Pandas Phần #10 - Thêm/Xóa Hàng & Cột DataFrame
  • Hướng dẫn về Pandas Phần #11 - Các thuộc tính & phương thức DataFrame
  • Hướng dẫn Pandas Phần #12 - Xử lý dữ liệu bị thiếu hoặc giá trị NaN
  • Hướng dẫn về Pandas Phần #13 - Lặp lại các Hàng & Cột của DataFrame
  • Hướng dẫn Pandas Phần #14 - Sắp xếp DataFrame theo Hàng hoặc Cột
  • Hướng dẫn về gấu trúc Phần #15 - Hợp nhất hoặc ghép các khung dữ liệu
  • Hướng dẫn về Pandas Phần #16 - DataFrame GroupBy được giải thích bằng các ví dụ
 

Bạn đang muốn tạo dựng sự nghiệp trong Khoa học dữ liệu với Python?

Khoa học dữ liệu là tương lai và tương lai là ở đây ngay bây giờ. Các nhà khoa học dữ liệu hiện là những chuyên gia được tìm kiếm nhiều nhất hiện nay. Để trở thành một Nhà khoa học dữ liệu giỏi hoặc để chuyển đổi nghề nghiệp trong Khoa học dữ liệu, người ta phải sở hữu bộ kỹ năng phù hợp. Chúng tôi đã tuyển chọn danh sách Chứng chỉ chuyên nghiệp tốt nhất về Khoa học dữ liệu với Python. Các khóa học này sẽ dạy cho bạn các công cụ lập trình cho Khoa học dữ liệu như Pandas, NumPy, Matplotlib, Seaborn và cách sử dụng các thư viện này để triển khai các mô hình Máy học

Kiểm tra Đánh giá chi tiết về Chứng chỉ chuyên nghiệp tốt nhất về Khoa học dữ liệu với Python

Hãy nhớ rằng, Khoa học dữ liệu đòi hỏi rất nhiều kiên nhẫn, bền bỉ và thực hành. Vì vậy, hãy bắt đầu học ngay hôm nay

Chủ Đề