Việc ghi vào một tệp bao gồm việc mở tệp trong một chế độ cụ thể, ghi dữ liệu vào đó, và sau đó đóng tệp để đảm bảo rằng tất cả dữ liệu được lưu và tài nguyên được giải phóng. Python cung cấp một hàm tích hợp sẵn open() để xử lý các thao tác với tệp và nhiều phương thức khác nhau để ghi dữ liệu.
Mở một tập tin để ghi là bước đầu tiên trong việc thực hiện các thao tác ghi trong Python. Hàm open() được sử dụng để mở các tập tin trong các chế độ khác nhau, mỗi chế độ phù hợp với các trường hợp sử dụng cụ thể.
Hàm open() trong Python được sử dụng để mở một tệp. Nó yêu cầu ít nhất một tham số, đó là tên của tệp, và có thể nhận một tham số thứ hai tùy chọn để chỉ định chế độ mà tệp nên được mở.
Dưới đây là các chế độ chính mà bạn có thể sử dụng để mở một tệp để ghi −
w (Write mode) − Mở tệp để ghi. Nếu tệp đã tồn tại, nó sẽ cắt ngắn (làm trống) tệp trước khi ghi. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới.
a (Append Mode) − Dữ liệu được ghi vào cuối tệp. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới.
x (Exclusive Creation Mode) − Mở tệp để tạo độc quyền. Nếu tệp đã tồn tại, thao tác sẽ thất bại.
b (Binary Mode) − Khi được sử dụng với các chế độ khác, mở tệp trong chế độ nhị phân.
+ (Update Mode) − Mở tệp để cập nhật (đọc và ghi).
Chế độ này được sử dụng khi bạn muốn ghi dữ liệu vào một tệp, bắt đầu từ đầu mỗi khi tệp được mở.
file = open("example.txt", "w") file.write("Hello, World!") file.close() print ("File opened successfully!!")
Dưới đây là kết quả thu được −
File opened successfully!!
Chế độ này được sử dụng khi bạn muốn thêm dữ liệu vào cuối tệp mà không làm thay đổi nội dung hiện có của nó −
file = open("example.txt", "a") file.write("Appending this line.\n") file.close() print ("File opened successfully!!")
Điều này sẽ tạo ra kết quả sau −
File opened successfully!!
Phương thức write() được sử dụng để ghi một chuỗi đơn vào một tệp. Điều này làm cho nó phù hợp cho nhiều thao tác tệp dựa trên văn bản khác nhau.
Phương thức write() nhận một đối số duy nhất: chuỗi mà bạn muốn ghi vào tệp. Nó ghi chính xác nội dung của chuỗi vào tệp mà không thêm bất kỳ ký tự bổ sung nào, chẳng hạn như ký tự xuống dòng.
Trong ví dụ sau, chúng ta đang mở tệp "example.txt" ở chế độ ghi. Sau đó, chúng ta sử dụng phương thức write() để ghi một chuỗi vào tệp −
# Open a file in write mode with open("example.txt", "w") as file: file.write("Hello, World!\n") file.write("This is a new line.\n") print ("File opened successfully!!")
Dưới đây là đầu ra của đoạn mã trên −
File opened successfully!!
Phương thức writelines() được sử dụng để ghi một danh sách các chuỗi vào một tệp. Mỗi chuỗi trong danh sách được ghi vào tệp theo thứ tự mà không tự động thêm bất kỳ ký tự xuống dòng nào.
Trong ví dụ này, chúng ta đang tạo một danh sách các chuỗi, gọi là lines, với mỗi chuỗi kết thúc bằng ký tự xuống dòng. Sau đó, chúng ta mở một tệp "example.txt" ở chế độ ghi và sử dụng phương thức writelines() để ghi tất cả các chuỗi trong danh sách vào tệp trong một thao tác.
# List of lines to write to the file lines = ["First line\n", "Second line\n", "Third line\n"] # Open a file in write mode with open("example.txt", "w") as file: file.writelines(lines) print ("File opened successfully!!")
Đầu ra thu được như hình dưới đây −
File opened successfully!!
Việc ghi vào một tệp mới trong Python bao gồm việc tạo một tệp mới (hoặc ghi đè lên một tệp đã tồn tại) và ghi nội dung mong muốn vào đó. Dưới đây, chúng tôi sẽ giải thích các bước liên quan đến việc ghi vào một tệp mới −
Open the File − Sử dụng hàm open() để tạo hoặc mở một tệp trong chế độ ghi ("w" hoặc "wb" cho các tệp nhị phân).
Write Data − Sử dụng phương thức write() hoặc writelines() để ghi dữ liệu vào tệp.
Close the File − Đảm bảo rằng tệp được đóng đúng cách sau khi ghi, thường sử dụng câu lệnh "with" để xử lý tự động.
Trong ví dụ dưới đây, chúng ta tạo một tệp "foo.txt" và ghi nội dung đã cho vào tệp đó, sau đó cuối cùng là đóng tệp đó.
# Open a file fo = open("foo.txt", "w") fo.write( "Python is a great language.\nYeah its great!!\n") # Close opened file fo.close()
Nếu bạn mở tệp này bằng bất kỳ ứng dụng chỉnh sửa văn bản nào như Notepad, nó sẽ có nội dung sau −
Python is a great language. Yeah its great!!
Theo mặc định, các thao tác đọc/ghi trên một đối tượng tệp được thực hiện trên dữ liệu chuỗi văn bản. Nếu chúng ta cần xử lý các tệp loại khác nhau, chẳng hạn như tệp phương tiện (mp3), tệp thực thi (exe) hoặc hình ảnh (jpg), chúng ta phải mở tệp ở chế độ nhị phân bằng cách thêm tiền tố 'b' vào chế độ đọc/ghi.
Để ghi dữ liệu nhị phân vào một tệp, hãy mở tệp ở chế độ ghi nhị phân ('wb'). Ví dụ sau đây minh họa điều này −
# Open a file in binary write mode with open('test.bin', 'wb') as f: # Binary data data = b"Hello World" f.write(data)
Việc chuyển đổi một chuỗi văn bản thành byte có thể được thực hiện bằng cách sử dụng hàm encode(). Điều này rất hữu ích khi bạn cần ghi dữ liệu văn bản dưới dạng dữ liệu nhị phân.
# Open a file in binary write mode with open('test.bin', 'wb') as f: # Convert text string to bytes data = "Hello World".encode('utf-8') f.write(data)
Khi một tệp tin hiện có được mở ở chế độ ghi ('w'), nội dung trước đó của nó sẽ bị xóa. Mở một tệp tin với quyền ghi coi nó như một tệp tin mới. Để thêm dữ liệu vào một tệp tin hiện có mà không xóa nội dung của nó, bạn nên mở tệp tin ở chế độ thêm ('a').
Ví dụ dưới đây minh họa cách mở một tệp trong chế độ thêm và thêm văn bản mới vào nó −
# Open a file in append mode fo = open("foo.txt", "a") text = "TutorialsPoint has a fabulous Python tutorial" fo.write(text) # Close opened file fo.close()
Nếu bạn mở tệp này bằng bất kỳ ứng dụng chỉnh sửa văn bản nào như Notepad, nó sẽ có nội dung sau −
Python is a great language. Yeah its great!! TutorialsPoint has a fabulous Python tutorial
Khi một tệp được mở để ghi bằng cách sử dụng 'w' hoặc 'a', không thể thực hiện các thao tác ghi tại bất kỳ vị trí byte nào trước đó trong tệp. Tuy nhiên, chế độ 'w+' cho phép cả thao tác đọc và ghi mà không cần đóng tệp. Hàm seek() được sử dụng để di chuyển con trỏ đọc/ghi đến bất kỳ vị trí byte nào mong muốn trong tệp.
Phương thức seek() được sử dụng để đặt vị trí của con trỏ đọc/ghi trong tệp. Cú pháp cho phương thức seek() như sau −
fileObject.seek(offset[, whence])
Ở đâu,
offset − Đây là vị trí của con trỏ đọc/ghi trong tệp.
whence − Đây là tùy chọn và mặc định là 0, có nghĩa là định vị tệp tuyệt đối; các giá trị khác là 1, có nghĩa là tìm kiếm tương đối với vị trí hiện tại và 2 có nghĩa là tìm kiếm tương đối với cuối tệp.
Chương trình sau đây minh họa cách mở một tệp ở chế độ đọc-ghi ('w+'), ghi một số dữ liệu, tìm một vị trí cụ thể và sau đó ghi đè lên một phần nội dung của tệp −
# Open a file in read-write mode fo = open("foo.txt", "w+") # Write initial data to the file fo.write("This is a rat race") # Move the read/write pointer to the 10th byte fo.seek(10, 0) # Read 3 bytes from the current position data = fo.read(3) # Move the read/write pointer back to the 10th byte fo.seek(10, 0) # Overwrite the existing content with new text fo.write('cat') # Close the file fo.close()
Nếu chúng ta mở file ở chế độ đọc (hoặc di chuyển đến vị trí bắt đầu trong chế độ 'w+') và đọc nội dung, nó sẽ hiển thị như sau −
This is a cat race