Hướng dẫn mode open file python - chế độ mở tệp python

Dẫn nhập

Trong bài trước, Kteam đã giới thiệu đến bạn các phương thức của KIỂU DỮ LIỆU DICT trong Python

Nội dung chính ShowShow

  • Dẫn nhập
  • Khái quát về File trong Python
  • Mở File trong Python
  • Đóng File trong Python
  • Đọc File trong Python
  • Phương thức read
  • Phương thức readline
  • Phương thức readlines
  • Đọc file bằng constructor nhận iterable
  • Ghi File trong Python
  • Phương thức write
  • Kiểm soát con trỏ file
  • Phương thức seek
  • Câu lệnh with
  • Củng cố bài học
  • Đáp án bài trước
  • Câu hỏi củng cố
  • Kết luận
  • Thảo luận

Ở bài này Kteam sẽ giới thiệu với các bạn CÁCH XỬ LÝ FILE trong Python. Một trong những điều thiết yếu mà bất cứ ngôn ngữ lập trình nào bạn cũng đều phải tìm hiểu.CÁCH XỬ LÝ FILE trong Python. Một trong những điều thiết yếu mà bất cứ ngôn ngữ lập trình nào bạn cũng đều phải tìm hiểu.

Nội dung

Để đọc hiểu bài này tốt nhất bạn cần:

  • Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON.
  • Xem qua bài CÁCH CHẠY CHƯƠNG TRÌNH PYTHON.
  • Nắm CÁCH GHI CHÚ và BIẾN TRONG PYTHON.
  • KIỂU DỮ LIỆU LIST, KIỂU DỮ LIỆU TUPLE, KIỂU DỮ LIỆU SET trong Python.

Trong bài này, chúng ta sẽ cùng tìm hiểu những nội dung sau đây

  • Khái quát về File trong Python
  • Mở File trong Python
  • Đóng File trong Python
  • Đọc File trong Python
  • Ghi File trong Python
  • Kiểm soát con trỏ File
  • Câu lệnh with

Khái quát về File trong Python

Mở File trong Python

Đóng File trong Python

Đọc File trong Python

  • Phương thức read
  • Phương thức readlineescape sequence newline \n.

Phương thức readlines

  • Đọc file bằng constructor nhận iterable
  • Ghi File trong Python

Mở File trong Python

Đóng File trong Python

Đọc File trong PythonCMD ở ngay trong thư mục chứ file đó để không gặp nhiều khó khăn trong việc xử lí đường dẫn (Việc xử lí đường dẫn, Kteam sẽ giới thiệu cách xử lí bằng thư viện os trong tương lai).

Phương thức readkteam.txt

Phương thức readline

How Kteam
Free Education

Share to better

print('hello world!')


Phương thức readlines

Đọc file bằng constructor nhận iterable

Ghi File trong Python

Phương thức write(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

Kiểm soát con trỏ fileỞ mức độ cơ bản, chúng ta sẽ chỉ quan tâm đến 2 parameter: file mode.

Phương thức seek

Câu lệnh with

Củng cố bài học

Đáp án bài trước Kteam xin được khuyến khích các bạn không sử dụng interactive prompt ở bài này.

>>> file_object = open('kteam.txt')
>>> file_object
<_io.TextIOWrapper name='kteam.txt' mode='r' encoding='cp1258'>
>>> type(file_object) # không cần quan tấm lắm
<class '_io.TextIOWrapper'>

Câu hỏi củng cốhàm open trả về một file object. Đây cũng là một iterable.

Kết luận


Đóng File trong Python

Thảo luận

Ghi File trong Python

.close()close()

Phương thức write

  • Kiểm soát con trỏ file
  • Phương thức seek

Câu lệnh with

Củng cố bài học

>>> fobj = open('kteam.txt')
>>> fobj
<_io.TextIOWrapper name='kteam.txt' mode='r' encoding='cp1258'>
>>> fobj.close()
>>> fobj # sau khi đóng file, các phương thức xử lí sẽ không thể sử dụng được
<_io.TextIOWrapper name='kteam.txt' mode='r' encoding='cp1258'>

Đọc File trong Python

Phương thức read

Phương thức read

Ghi File trong Python

.read(size=-1)read(size=-1)

Phương thức write Nếu size bị bỏ trống hoặc là một số âm. Nó sẽ đọc hết nội dung của file đồng thời đưa con trỏ file tới cuối file. Nếu không nó sẽ đọc tới n kí tự (với n = size) hoặc cho tới khi nội dung của file đã đọc xong.

  • Kiểm soát con trỏ file
  • Phương thức seek

Câu lệnh with

>>> fobj = open('kteam.txt')
>>> data = fobj.read()
>>> data
"How Kteam\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
>>> print(data)
How Kteam
Free Education

Share to better

print('hello world!')

>>> fobj.read() # con trỏ file ở vị trí cuối cùng, bạn không thể đọc được gì nữa
''
>>> fobj.close() # nhớ đóng file

Củng cố bài học

>>> fobj = open('kteam.txt')
>>> fobj.read(2)
'Ho'
>>> fobj.read(10)
'w Kteam\nFr'
>>> fobj.read(20)
'ee Education\n\nShare '
>>> fobj.read()
"to better\n\nprint('hello world!')\n"
>>> fobj.close()

Phương thức readline

Ghi File trong Python

.readline(size=-1)readline(size=-1)

Phương thức writeVới parameter size thì hoàn toàn tương tự như phương thức read.

  • Kiểm soát con trỏ filenewline hoặc hết file thì ngừng.
  • Phương thức seek
  • Câu lệnh with
  • Củng cố bài học

Ví dụ:

>>> fobj = open('kteam.txt')
>>> fobj.readline()
'How Kteam\n'
>>> fobj.readline(10)
'Free Educa'
>>> fobj.readline()
'tion\n'
>>> fobj.readline()
'\n'
>>> fobj.readline()
'Share to better\n'
>>> fobj.close()

Phương thức readlines

Cú pháp:

.readlines(hint=-1)readlines(hint=-1)

Ở mức độ cơ bản, ta không phải quan tâm đến parameter hint. hint.

Công dụng: Phương thức này sẽ đọc toàn bộ file, sau đó cho chúng vào một list. Với các phần tử trong list là mỗi dòng của file. Phương thức này sẽ đọc toàn bộ file, sau đó cho chúng vào một list. Với các phần tử trong list là mỗi dòng của file.

  • Con trỏ file sẽ được đưa  tới cuối file. Khi đó, nếu bạn tiếp tục dùng readlines. Bạn sẽ nhận được một list rỗng.

Ví dụ:

>>> fobj = open('kteam.txt')
>>> list_content = fobj.readlines()
>>> list_content
['How Kteam\n', 'Free Education\n', '\n', 'Share to better\n', '\n', "print('hello world!')\n"]
>>> list_content[2]
'\n'
>>> list_content[-1]
"print('hello world!')\n"
>>> fobj.close()

Đọc file bằng constructor nhận iterable

Như đã nói, file object nhận được từ hàm open cũng là một iterable.iterable.

Thế nên, ta có thể sử dụng constructor list

>>> fobj = open('kteam.txt')
>>> list_content = list(fobj)
>>> list_content
['How Kteam\n', 'Free Education\n', '\n', 'Share to better\n', '\n', "print('hello world!')\n"]
>>> fobj.close()

Và cũng có thể là Tuple.

>>> fobj = open('kteam.txt')
>>> tup_content = tuple(fobj)
>>> tup_content
('How Kteam\n', 'Free Education\n', '\n', 'Share to better\n', '\n', "print('hello world!')\n")
>>> fobj.close()

Các constructor này cũng sẽ đưa con trỏ file xuống cuối file.


Ghi File trong Python

Chúng ta có sự giúp đỡ của phương thức write để ghi nội dung vào file.

Và chúng ta cũng không cần phải tạo file. Vì các mode ghi sẽ giúp chúng ta tạo file.

Phương thức write

Cú pháp:

.write(text)write(text)

Ở mức độ cơ bản, ta không phải quan tâm đến parameter hint.Phương thức này sẽ trả về số kí tự mà chúng ta ghi vào.

Ví dụ:

>>> help(open)
0

Công dụng: Phương thức này sẽ đọc toàn bộ file, sau đó cho chúng vào một list. Với các phần tử trong list là mỗi dòng của file.

Con trỏ file sẽ được đưa  tới cuối file. Khi đó, nếu bạn tiếp tục dùng readlines. Bạn sẽ nhận được một list rỗng.

>>> help(open)
1

Đọc file bằng constructor nhận iterable

Như đã nói, file object nhận được từ hàm open cũng là một iterable.

>>> help(open)
2

Thế nên, ta có thể sử dụng constructor list

Và cũng có thể là Tuple.

Các constructor này cũng sẽ đưa con trỏ file xuống cuối file.

Ghi File trong Python

Cú pháp:

Ở mức độ cơ bản, ta không phải quan tâm đến parameter hint.seek(offset, whence=0)

Công dụng: Phương thức này sẽ đọc toàn bộ file, sau đó cho chúng vào một list. Với các phần tử trong list là mỗi dòng của file. whence = 0. whence = 1 hoặc whence = 2 chỉ sử dụng với binary file.

Con trỏ file sẽ được đưa  tới cuối file. Khi đó, nếu bạn tiếp tục dùng readlines. Bạn sẽ nhận được một list rỗng.

Đọc file bằng constructor nhận iterablewhence.

Như đã nói, file object nhận được từ hàm open cũng là một iterable.Phương thức này giúp ta di chuyển con trỏ từ vị trí đầu file qua offset kí tự. Và parameter offset phải là một số tự nhiên.

  • Thế nên, ta có thể sử dụng constructor list
  • Và cũng có thể là Tuple.

Ví dụ:

>>> help(open)
3

Các constructor này cũng sẽ đưa con trỏ file xuống cuối file.

Ghi File trong Python

>>> help(open)
4

  

Chúng ta có sự giúp đỡ của phương thức write để ghi nội dung vào file.with-block nằm thụt vào so với dòng with expression (theo chuẩn PEP8 là 4 space và là dùng space không dùng tab)

Và chúng ta cũng không cần phải tạo file. Vì các mode ghi sẽ giúp chúng ta tạo file.__enter__ __exit__ của đối tượng. Do đó, ở đây Kteam sẽ nói cơ bản khi sử dụng file.

Phương thức write with-block. File sẽ được đóng.

>>> help(open)
5

Công dụng: Phương thức này sẽ trả về số kí tự mà chúng ta ghi vào. nhiên, có thể sử dụng câu lệnh with kết hợp với toán tử :=

>>> help(open)
6

Mỗi lần sử dụng write. Con trỏ file sẽ được đặt ngay sau kí tự cuối cùng được ghi. Hãy lưu ý điều này, nó rất quan trọng đấy. Đặc biệt là khi bạn sử dụng các mode vừa đọc vừa ghi.

Nhưng, bạn sẽ gặp vấn đề như thế này khi sử dụng mode w. Ta hãy mở lại file khi nãy ta mới ghi một vài dòng vào nhé.

Đó là nội dung file ban đầu của bạn sẽ bị mất đi. Đó là lí do chúng ta cần mới mode a.

  1. Ta hãy mở lại file ta mới  viết thêm một lần nữa.
  1. Kiểm soát con trỏ file
>>> help(open)
7

Bạn có thể thấy, con trỏ file rất quan trọng, nó dẫn đường cho việc đọc file, viết file. Và bạn cũng cần phải kiểm soát được nó.

  1. Việc đó, ta sẽ nhờ tới phương thức seek
  1. Phương thức seek
>>> help(open)
8

.seek(offset, whence=0)


Với Python 3.X. Một text file sẽ chỉ được sử dụng whence = 0. whence = 1 hoặc whence = 2 chỉ sử dụng với binary file.

Với Python 2.X thì bạn không phải quan tấm vấn đề này.

Do đó, ta cũng không cần quan tâm tới parameter whence.

Công dụng: Phương thức này giúp ta di chuyển con trỏ từ vị trí đầu file qua offset kí tự. Và parameter offset phải là một số tự nhiên.Luyện tập – Thử thách – Không ngại khó”.


Nhờ phương thức này, ta có thể ghi nội dung từ bất cứ đâu trong file.

Và từ đó ta có thể đọc lại file sau khi ta đưa con trỏ file xuống cuối file.