Thay thế toàn bộ dòng trong tệp python

Việc thay thế chuỗi được thực hiện đơn giản nhất bằng phương thức replace của các đối tượng chuỗi. Công việc ở đây là hỗ trợ đọc từ tệp đã chỉ định (hoặc đầu vào tiêu chuẩn) và ghi vào tệp đã chỉ định (hoặc đầu ra tiêu chuẩn)

#!/usr/bin/env python
import os, sys

nargs = len(sys.argv)

if not 3 <= nargs <= 5:
    print "usage: %s search_text replace_text [infile [outfile]]" % \
        os.path.basename(sys.argv[0])
else:
    stext = sys.argv[1]
    rtext = sys.argv[2]
    input = sys.stdin
    output = sys.stdout
    if nargs > 3:
        input = open(sys.argv[3])
    if nargs > 4:
        output = open(sys.argv[4], 'w')
    for s in input.xreadlines(  ):
        output.write(s.replace(stext, rtext))
    output.close(  )
    input.close(  )

Công thức này thực sự đơn giản, nhưng đó là điều tuyệt vời của nó—tại sao phải làm những thứ phức tạp khi những thứ đơn giản là đủ? . Tập lệnh xem xét các đối số của nó để xác định văn bản tìm kiếm, văn bản thay thế, tệp đầu vào (mặc định là đầu vào tiêu chuẩn) và tệp đầu ra (mặc định là đầu ra tiêu chuẩn). Sau đó, nó lặp qua từng dòng của tệp đầu vào, ghi vào tệp đầu ra một bản sao của dòng đó với phép thay thế được thực hiện trên đó. Đó là tất cả. Để chính xác, nó sẽ đóng cả hai tệp ở cuối

Miễn là nó nằm vừa vặn trong bộ nhớ ở hai bản sao (một trước và một sau khi thay thế, vì các chuỗi là bất biến), chúng ta có thể, với một số mức tăng tốc, hoạt động trên toàn bộ nội dung của tệp đầu vào cùng một lúc thay vì lặp lại. Với các PC ngày nay thường có bộ nhớ 256 MB, việc xử lý các tệp có dung lượng lên tới khoảng 100 MB không phải là vấn đề. Chỉ cần thay thế vòng lặp for bằng một câu lệnh duy nhất

output.write(input.read(  ).replace(stext, rtext))

Như bạn có thể thấy, điều đó thậm chí còn đơn giản hơn vòng lặp được sử dụng trong công thức

Nếu bạn gặp khó khăn với phiên bản Python cũ hơn, chẳng hạn như 1. 5. 2, bạn vẫn có thể sử dụng công thức này. Thay đổi câu lệnh import thành

import os, sys, string

và thay đổi hai dòng cuối cùng của công thức thành

for s in input.readlines(  ):
    output.write(string.replace(s, stext, rtext))

Phương thức xreadlines được sử dụng trong công thức đã được giới thiệu với Python 2. 1. Cần đề phòng không đọc tất cả tệp vào bộ nhớ cùng một lúc, trong khi readlines phải làm như vậy và do đó có thể gặp sự cố với các tệp thực sự lớn

Bài viết này đề cập đến một số chương trình trong Python thay thế một dòng cụ thể từ một tệp. Dưới đây là danh sách các chương trình được đề cập trong bài viết này

  • Thay thế dòng cụ thể trong một tệp
  • Thay thế dòng cụ thể trong tệp và in nội dung mới của tệp

Những việc cần làm trước Chương trình

Vì chương trình được cung cấp bên dưới hoạt động trên tệp, do đó phải có tệp trước khi thực hiện chương trình được cung cấp bên dưới. Do đó, hãy tạo một trình giải mã tên tệp. txt và đặt nội dung sau

This is a text file.
The name of this file is codescracker.txt
You are practicing Python by example here

bên trong tập tin đó. Lưu tệp bên trong thư mục hiện tại. Ở đây thư mục hiện tại có nghĩa là thư mục lưu mã nguồn của chương trình. Đây là ảnh chụp nhanh của tệp được lưu trữ trong thư mục hiện tại

python replace line in file

và đây là ảnh chụp nhanh của tệp đã mở có tên là Codecracker. txt

python example replace line in file

Bây giờ hãy tiếp tục và tạo chương trình để thao tác trên tệp này để thay thế bất kỳ dòng nào bằng dòng mới

Lưu ý - Để thay thế bất kỳ dòng nào, bạn phải nhập số dòng rồi nhập nội dung để thay thế số dòng đó bằng nội dung đã cho

Thay thế dòng cụ thể từ tệp

Câu hỏi đặt ra là viết một chương trình Python thay thế bất kỳ dòng cụ thể nào từ một tệp. Tên của tệp, số dòng và nội dung mới cho số dòng phải được người dùng nhập vào thời gian chạy. Chương trình đưa ra dưới đây là câu trả lời cho câu hỏi này

print("Enter the name of file: ")
filename = input()

filehandle = open(filename, "r")
listOfLines = filehandle.readlines()
filehandle.close()

print("Enter line number to replace for: ")
lineNo = int(input())
print("Enter new content for line number", lineNo, ": ")
newline = input()
listOfLines[lineNo] = newline

filehandle = open(filename, "w")
filehandle.writelines(listOfLines)
filehandle.close()

print("\nLine replaced successfully!")

Lưu ý - Sử dụng chỉ mục trong khi nhập số dòng. Nghĩa là, nếu bạn muốn thay thế dòng đầu tiên của tệp văn bản, thì hãy nhập 0 làm đầu vào. Nếu bạn muốn thay thế dòng thứ hai, hãy nhập 1, v.v.

Ảnh chụp nhanh được cung cấp bên dưới cho thấy đầu ra ban đầu được tạo bởi chương trình Python ở trên. Chúng ta hãy có một cái nhìn về nó

python program replace specific line in file

Bây giờ cung cấp các đầu vào, người giải mã. txt làm tên tệp, 2 làm số dòng và Đây là chương trình ví dụ về Python. như nội dung để thay thế bằng. Đây là mẫu chạy của nó với chính xác các đầu vào này

replace specific line in file python

Bây giờ nếu bạn sẽ thấy nội dung của tệp, trình bẻ mã. txt, dòng thứ ba của nó sẽ được thay thế bằng dòng mới như đã nhập ở trên. Đây là ảnh chụp nhanh mới của cùng một tệp

replace line in file python

Thay thế bất kỳ Dòng nào trong Tệp và In Nội dung Mới

Trong chương trình này, tôi đã triển khai mã in cả nội dung cũ và mới của tệp sau khi thay thế dòng. Vì nó trông tương tác hơn

print("Enter File's Name: ", end="")
fname = input()

fhandle = open(fname, "r")
lines = fhandle.readlines()
fhandle.close()

print("Enter line number to replace it: ", end="")
lno = int(input())
print("Enter new content for line no.", lno, "\b: ", end="")
nline = input()

print("\n------Old Content-------")
content = ""
content = content.join(lines)
print(content)

lines[lno] = nline
fhandle = open(fname, "w")
fhandle.writelines(lines)
fhandle.close()

print("\n-----New Content--------")
content = ""
content = content.join(lines)
print(content)

Đây là lần chạy mẫu của nó với đầu vào của người dùng, trình giải mã. txt làm tên tệp, 2 làm số dòng, Đây là một chương trình. như dòng mới để thay thế bằng