Python - Write to File

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.

Opening a File for Writing

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ể.

The open() Function

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ở.

File Modes for Writing

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).

Example: Opening a File in Write Mode

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!!

Example: Opening a File in Append Mode

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!!

Writing to a File Using write() Method

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.

Example

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!!

Writing to a File Using writelines() Method

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.

Example

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!!

Writing to a New File

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.

Example

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!!

Writing to a New File in Binary Mode

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.

Writing Binary Data to a File

Để 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)

Converting Text Strings to Bytes

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)

Writing to an Existing File

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').

Example

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

Writing to a File in Reading and Writing Modes

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.

Using the seek() Method

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.

Example

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