Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Đối tượng File (File Objects) trong Python?


Trong Python, khi đọc hoặc ghi file, ta không cần import thư viện nào vì Python xử lý gốc (natively).

Điều đầu tiên là dùng hàm built-in open() để lấy đối tượng file (file object).

Hàm open() mở file và trả về đối tượng file. Đối tượng file chứa các phương thức và thuộc tính sau này có thể dùng để lấy thông tin hoặc thao tác trên file vừa mở.

File là gì?

Trước khi thao tác file, hãy hiểu file là gì? File là vị trí có tên trên đĩa để lưu trữ thông tin liên quan, vì file có tên và vị trí nên được lưu trên ổ cứng.

Trong Python, thao tác file thực hiện theo thứ tự:

  • Mở file.
  • Đọc hoặc Ghi.
  • Đóng file.

Mở file - Hàm Open()

Để mở file đọc hoặc ghi, phải dùng hàm built-in open().

Hàm open() dùng hai đối số. Thứ nhất là tên file, thứ hai là mục đích mở (đọc hay ghi?).

Cú pháp mở file object trong Python:

File_obj = open(“filename”, “mode”)

Trong đó

  • File_obj (còn gọi là handle) là biến chứa đối tượng file.

  • filename: Tên file.

  • mode: Cho trình thông dịch biết file sẽ được dùng như thế nào.

>>> f = open("pytube1.py") # mở file trong thư mục hiện tại >>> f = open(r"c:\users\rajesh\Documents\readme.txt") # Mở file từ đường dẫn cho trước

Tham số mode

Như thấy ở trên, đối số thứ hai của open() là tùy chọn (mode). Ta có thể chỉ định mode khi mở file: đọc 'r', ghi 'w', thêm 'a'. Cũng có thể chỉ định chế độ text hay binary.

Mặc định là text mode, khi đọc file ta nhận được chuỗi (string).

Các mode khác nhau hỗ trợ trong open():

Các chế độ File trong Python

Mode Mô tả
'r' Mở file để đọc. (mặc định)
'w' Mở file để ghi. Tạo file mới nếu không tồn tại hoặc cắt ngắn file nếu đã tồn tại.
'x' Mở file để tạo độc quyền (exclusive creation). Nếu file đã tồn tại, thao tác thất bại.
'a' Mở để thêm vào cuối file mà không cắt ngắn. Tạo file mới nếu không tồn tại.
't' Mở ở chế độ text. (mặc định)
'b' Mở ở chế độ binary.
'+' Mở file để cập nhật (đọc và ghi)
>>> f = open("pytube1.py") #tương đương 'r' hoặc 'rt' >>> f = open("pytube1.py", "w")# ghi ở chế độ text >>> f = open("color3.jpg", "r+b")# đọc và ghi ở chế độ binary

Mã hóa mặc định phụ thuộc nền tảng. Windows là 'cp1252' nhưng 'utf-8' trong Linux.

Khuyên dùng: chỉ định rõ kiểu mã hóa:

>>> f = open("pytube1.py", mode = "r", encoding = 'utf-8')

Tạo file text

Hãy tạo file text đơn giản trong Python dùng trình soạn thảo bất kỳ, tôi dùng Python shell.

>>> # Tạo file text tên "textfile.txt" trong thư mục làm việc hiện tại >>> f = open("textfile.txt", "w") >>> #trên sẽ tạo file textfile.txt trong thư mục mặc định >>> f.write("Hello, Python") 13 >>> f.write("\nThis is our first line") 23 >>> f.write("\nThis is our second line") 24 >>> f.write("\nWhy writing more?, Because we can :)") 37 >>> f.close()

File mới textfile.txt được tạo trong thư mục làm việc hiện tại, mở file thấy nội dung:

Đối tượng File (File Objects) trong Python?

Đọc file text trong Python

Để đọc file text, có nhiều cách.

Nếu muốn trích chuỗi chứa tất cả ký tự trong file, dùng phương thức:

file.read()

Chương trình triển khai cú pháp trên:

>>> f = open("textfile.txt", "r") >>> f.read() 'Hello, Python\nThis is our first line\nThis is our second line\nWhy writing more?, Because we can :)'

Nếu muốn đọc số ký tự nhất định từ file, làm rất dễ:

>>> f = open("textfile.txt", "r") >>> print(f.read(13)) Hello, Python

Tuy nhiên, nếu muốn đọc file dòng per dòng, dùng hàm readline().

>>> f = open("textfile.txt", "r") >>> print(f.read(13)) Hello, Python >>> print(f.readline()) >>> f = open("textfile.txt", "r") >>> print(f.readline()) Hello, Python >>> print(f.readline()) This is our first line >>> print(f.readline()) This is our second line >>> print(f.readline()) Why writing more?, Because we can :)

Hoặc muốn trả về mọi dòng trong file, tách biệt đúng cách, dùng readlines().

>>> f = open("textfile.txt", "r") >>> print(f.readlines()) ['Hello, Python\n', 'This is our first line\n', 'This is our second line\n', 'Why writing more?, Because we can :)']

Mỗi dòng cách nhau bởi dấu phẩy.

Lặp qua đối tượng file

Nếu muốn đọc hoặc trả về tất cả dòng từ file theo cách có cấu trúc và hiệu quả nhất, dùng vòng lặp for trên đối tượng file.

>>> f = open("textfile.txt", "r") >>> for line in f: print(line) Hello, Python This is our first line This is our second line Why writing more?, Because we can :)

Ghi vào file

Ghi file đơn giản: mở file và truyền text muốn ghi.

Phương pháp này dùng để thêm dữ liệu vào file hiện có. Dùng ký tự EOL để xuống dòng sau khi ghi.

>>> f = open("textfile.txt", "w") >>> f.write("There are tons to reason to 'fall in love with PYTHON'") 54 >>> f.write("\nSee, i have added one more line :).") 36 >>> f.close() >>> f = open("textfile.txt", "r") >>> for line in f: print(line) There are tons to reason to 'fall in love with PYTHON' See, i have added one more line :).

Đóng file

Khi xong việc với file, dùng f.close() để kết thúc. Điều này đóng file hoàn toàn, giải phóng tài nguyên cho hệ thống dùng nơi khác.

>>> f = open("textfile.txt", "r") >>> f.close() >>> f.readlines() Traceback (most recent call last): File "<pyshell#95>", line 1, in <module> f.readlines() ValueError: I/O operation on closed file.

Sau khi đóng file, mọi cố gắng dùng đối tượng file sẽ ném lỗi.

Câu lệnh With

Câu lệnh with có thể dùng với đối tượng file. Kết hợp hai thứ (with statement & file objects) ta có cú pháp gọn gàng hơn và xử lý ngoại lệ (exception handling) trong chương trình.

Ưu điểm khác: file mở sẽ tự động đóng khi xong thao tác file.

Cú pháp

with open(“filename”) as file:

Ví dụ:

>>> with open("textfile.txt") as f: for line in f:    print(line)

Kết quả

There are tons to reason to 'fall in love with PYTHON' See, i have added one more line :).

Ghi file dùng with statement cũng dễ (như bạn đã đoán).

>>> with open("textfile.txt", "a") as f: f.write("\nHello, Python-Here i come once again!") 38 >>> with open("textfile.txt") as f: for line in f: print(line) There are tons to reason to 'fall in love with PYTHON' See, i have added one more line :). Hello, Python-Here i come once again!

Tách dòng trong file Text

Ta có thể tách các dòng lấy từ file text dùng hàm split() của Python. Có thể tách bằng ký tự bất kỳ: khoảng trắng, dấu hai chấm, v.v.

>>> with open("textfile.txt", "r") as f: data = f.readlines()    for line in data:       words = line.split()       print(words)

Kết quả

['There', 'are', 'tons', 'to', 'reason', 'to', "'fall", 'in', 'love', 'with', "PYTHON'"] ['See,', 'i', 'have', 'added', 'one', 'more', 'line', ':).'] ['Hello,', 'Python-Here', 'i', 'come', 'once', 'again!'] Và nếu tách text dùng dấu hai chấm thay vì khoảng trắng (như trên), chỉ cần đổi line.split() thành line.split(“:”) và kết quả sẽ như: ["There are tons to reason to 'fall in love with PYTHON'\n"] ['See, i have added one more line ', ').\n'] ['Hello, Python-Here i come once again!']