Python cung cấp các hàm có sẵn để tạo, viết và đọc tệp. Có hai loại tệp có thể được xử lý trong python, tệp văn bản bình thường và tệp nhị phân (được viết bằng ngôn ngữ nhị phân, 0s và 1s).

  • Tệp văn bản: Trong loại tệp này, Mỗi dòng văn bản được kết thúc bằng một ký tự đặc biệt gọi là EOL (End of Line), là ký tự dòng mới (‘\ n’) trong python theo mặc định.
  • Tệp nhị phân: Trong loại tệp này, không có dấu kết thúc cho một dòng và dữ liệu được lưu trữ sau khi chuyển đổi nó thành ngôn ngữ nhị phân có thể hiểu được của máy.

Trong bài viết này, cafedevsẽ tập trung vào việc mở, đóng, đọc và ghi dữ liệu trong một tệp văn bản.

1. Chế độ truy cập tệp

Chế độ truy cập chi phối loại hoạt động có thể có trong tệp đã mở. Nó đề cập đến cách tệp sẽ được sử dụng sau khi nó được mở. Các chế độ này cũng xác định vị trí của File Handle trong tệp.  File Handle giống như một con trỏ, xác định vị trí dữ liệu phải được đọc hoặc ghi trong tệp. Có 6 chế độ truy cập trong python.

  • Read Only (‘r’): Mở tệp văn bản để đọc.File Handle được đặt ở đầu tệp. Nếu tệp không tồn tại, xảy ra lỗi I / O. Đây cũng là chế độ mặc định để tệp được mở.
  • Read and Write (‘r +’): Mở tệp để đọc và ghi.File Handle được đặt ở đầu tệp. Gặp lỗi I / O nếu tệp không tồn tại.
  • Write Only (‘w’): Mở tệp để ghi. Đối với tệp hiện có, dữ liệu bị cắt bớt và ghi quá nhiều. File Handle được đặt ở đầu tệp. Tạo tệp nếu tệp không tồn tại.
  • Write and Read (‘w +’): Mở tệp để đọc và ghi. Đối với tệp hiện có, dữ liệu bị cắt bớt và ghi quá nhiều. File Handle được đặt ở đầu tệp.
  • Append Only (‘a’): Mở tệp để ghi. Tệp được tạo nếu nó không tồn tại. File Handle được đặt ở cuối tệp. Dữ liệu đang được ghi sẽ được chèn vào cuối, sau dữ liệu hiện có.
  • Append and Read (‘a +’): Mở tệp để đọc và ghi. Tệp được tạo nếu nó không tồn tại. File Handle được đặt ở cuối tệp. Dữ liệu đang được ghi sẽ được chèn vào cuối, sau dữ liệu hiện có.

2. Mở file

Nó được thực hiện bằng cách sử dụng hàm open (). Không cần nhập mô-đun nào cho chức năng này.

File_object = open (r “File_Name”, “Access_Mode”)

Tệp phải tồn tại trong cùng thư mục với tệp chương trình python khác, địa chỉ đầy đủ của tệp phải được ghi ở vị trí của tên tệp.

Lưu ý: Chữ r được đặt trước tên tệp để ngăn các ký tự trong chuỗi tên tệp được coi là ký tự đặc biệt. Ví dụ: nếu có \ temp trong địa chỉ tệp, thì \ t được coi là ký tự tab và lỗi xuất hiện do địa chỉ không hợp lệ. R làm cho chuỗi trở nên thô, nghĩa là nó cho biết rằng chuỗi không có bất kỳ ký tự đặc biệt nào. Có thể bỏ qua r nếu tệp nằm trong cùng một thư mục và địa chỉ không được đặt.

# Open function to open the file "MyFile1.txt" 
# (same directory) in append mode and
file1 = open("MyFile.txt","a")
  
# store its reference in the variable file1 
# and "MyFile2.txt" in D:\Text in file2
file2 = open(r"D:\Text\MyFile2.txt","w+")

Ở đây, tệp1 được tạo dưới dạng đối tượng cho MyFile1 và tệp2 là đối tượng cho MyFile2

3. Đóng file

Hàm close () đóng tệp và giải phóng không gian bộ nhớ mà tệp đó có được. Nó được sử dụng vào lúc tệp không còn cần thiết nữa hoặc nếu nó được mở ở một chế độ tệp khác.

File_object.close ()

# Opening and Closing a file "MyFile.txt"
# for object name file1.
file1 = open("MyFile.txt","a")
file1.close()

4. Ghi vào file

Có hai cách để ghi vào tệp.

write (): Chèn chuỗi str1 vào một dòng duy nhất trong tệp văn bản.

File_object.write (str1)

writelines (): Đối với danh sách các phần tử chuỗi, mỗi chuỗi được chèn vào tệp văn bản, được sử dụng để chèn nhiều chuỗi cùng một lúc.

File_object.writelines (L) cho L = [str1, str2, str3]

5. Đọc 1 file

Có ba cách để đọc dữ liệu từ tệp văn bản.

read (): Trả về các byte đã đọc dưới dạng một chuỗi. Đọc n byte, nếu không chỉ định n, đọc toàn bộ tệp.

File_object.read ([n])

readline (): Đọc một dòng của tệp và trả về dưới dạng một chuỗi. Đối với n được chỉ định, đọc nhiều nhất n byte. Tuy nhiên, không đọc nhiều hơn một dòng, ngay cả khi n vượt quá độ dài của dòng.

File_object.readline ([n])

readlines (): Đọc tất cả các dòng và trả về chúng dưới dạng mỗi dòng là một phần tử chuỗi trong danh sách.

File_object.readlines ()

Lưu ý: ‘\ n’ được coi là một ký tự đặc biệt gồm hai byte

# Program to show various ways to read and
# write data in a file.
file1 = open("myfile.txt","w")
L = ["This is Delhi \n","This is Paris \n","This is London \n"] 
  
# \n is placed to indicate EOL (End of Line)
file1.write("Hello \n")
file1.writelines(L)
file1.close() #to change file access modes
  
file1 = open("myfile.txt","r+") 
  
print "Output of Read function is "
print file1.read()
print
  
# seek(n) takes the file handle to the nth
# bite from the beginning.
file1.seek(0) 
  
print "Output of Readline function is "
print file1.readline()
print
  
file1.seek(0)
  
# To show difference between read and readline
print "Output of Read(9) function is "
print file1.read(9)
print
  
file1.seek(0)
  
print "Output of Readline(9) function is "
print file1.readline(9)
  
file1.seek(0)
# readlines function
print "Output of Readlines function is "
print file1.readlines()
print
file1.close()

output

Output of Read function is 
Hello 
This is Delhi 
This is Paris 
This is London 


Output of Readline function is 
Hello 


Output of Read(9) function is 
Hello 
Th

Output of Readline(9) function is 
Hello 

Output of Readlines function is 
['Hello \n', 'This is Delhi \n', 'This is Paris \n', 'This is London \n']

6. Thêm vào một tệp đã có

# Python program to illustrate
# Append vs write mode
file1 = open("myfile.txt","w")
L = ["This is Delhi \n","This is Paris \n","This is London \n"] 
file1.close()
  
# Append-adds at last
file1 = open("myfile.txt","a")#append mode
file1.write("Today \n")
file1.close()
  
file1 = open("myfile.txt","r")
print "Output of Readlines after appending"
print file1.readlines()
print
file1.close()
  
# Write-Overwrites
file1 = open("myfile.txt","w")#write mode
file1.write("Tomorrow \n")
file1.close()
  
file1 = open("myfile.txt","r")
print "Output of Readlines after writing"
print file1.readlines()
print
file1.close()

output

Output of Readlines after appending
['This is Delhi \n', 'This is Paris \n', 'This is London \n', 'Today \n']

Output of Readlines after writing
['Tomorrow \n']

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!