2010-06-02 35 views
5

Làm cách nào để thay thế chuỗi bằng một chuỗi khác, trong một tệp văn bản đã cho. Tôi chỉ cần lặp qua readline() và chạy thay thế trong khi lưu vào một tập tin mới? đây có phải là cách tốt hơn không?Chuỗi thay thế trên toàn bộ tệp văn bản bằng Python 3.x?

Tôi nghĩ rằng tôi có thể đọc toàn bộ điều vào bộ nhớ, nhưng tôi đang tìm kiếm một giải pháp thanh lịch hơn ...

Cảm ơn trước

+0

Có lý do cụ thể nào mà bạn không muốn lặp qua các dòng không? Đó có lẽ là giải pháp tốt nhất. – cobbal

+0

Tôi không biết ... Tôi đã tự hỏi liệu có cách nào tốt hơn tôi đoán không. Thay vì tạo tệp mới và xóa tệp cũ. –

+0

bằng cách tạo tệp mới bạn xóa cần phải có toàn bộ tệp trong bộ nhớ ... và nếu bạn đang thực hiện re.sub, bạn nên đảm bảo bạn sử dụng re.compile trước (và sau đó sử dụng phương thức phụ của cá thể đã trả về) –

Trả lời

10

fileinput là mô-đun từ thư viện chuẩn Python hỗ trợ "những gì trông giống như cập nhật tại chỗ của tệp văn bản" cũng như các tác vụ khác có liên quan.

for line in fileinput.input(['thefile.txt'], inplace=True): 
    print(line.replace('old stuff', 'shiny new stuff'), end='') 

Mã này là tất cả bạn cần cho công việc cụ thể mà bạn cần chú ý - nó thỏa thuận với tất cả các vấn đề (bằng văn bản cho một tập tin khác nhau, loại bỏ cái cũ một khi thực hiện xong và thay thế nó bằng những cái mới). Bạn cũng có thể thêm tham số khác như backup='.bk' để tự động giữ nguyên tệp cũ như (trong trường hợp này) thefile.txt.bk, cũng như xử lý nhiều tệp, lấy tên tệp để xử lý từ dòng lệnh, v.v. - đọc tài liệu, chúng khá tốt (và đây là mô-đun mà tôi đang đề xuất! -).

+2

Tránh sử dụng "in" và sử dụng "sys.stdout.write" thay vì nếu bạn không wan't "in" để thêm dòng trống và CTRL-M sau mỗi dòng – Badisi

+0

@Badisi Bạn có thể thực hiện điều đó bằng cách đặt 'in' ' Tham số s 'end', theo mặc định được đặt thành' \ n', thành một chuỗi rỗng. I.e: 'in (dòng, kết thúc = '')'. Xem https://docs.python.org/3.3/library/functions.html#print –

4

Nếu tập tin có thể được đọc vào bộ nhớ cùng một lúc, tôi muốn nói rằng

old = myfile.read() 
new = old.replace("find this", "replace by this") 
output.write(new) 

là ít nhất có thể đọc được như

for line in myfile: 
    output.write(line.replace("find this", "replace by this")) 

và có thể nhanh hơn một chút, nhưng cuối cùng, điều đó có thể không thực sự quan trọng.

Các vấn đề liên quan