1. Khái quát về File trong Python
File hay còn gọi là tệp, tập tin. File là tập hợp của các thông tin được đặt tên và lưu trữ trên bộ nhớ máy tính như đĩa cứng, đĩa mềm, CD, DVD,... Trong Python, file có 2 loại:
- Text File: Được cấu trúc như một dãy các dòng, mỗi dòng bao gồm một dãy các kí tự và một dòng tối thiểu là một kí tự dù cho dòng đó là dòng trống.; Các dòng trong text file được ngăn cách bởi một kí tự newline và mặc định trong Python chính là kí tự escape sequence newline \n.
- Binary File: Các file này chỉ có thể được xử lí bởi một ứng dụng biết và có thể hiểu được cấu trúc của file này. Và chúng ta ở đây với mức độ cơ bản chỉ xử lí text file.
2. Mở File trong Python
Trước tiên, Luật Minh Khuê sẽ hướng dẫn bạn tạo 1 File trong Python và sau đó mở CMD ở ngay trong thư mục
Tên file sẽ là: luatminhkhue.txt
Nội dung file:
How Luatminhkhue
Free Education
Share to better
print('hello world!')
3. Phương thức File write() trong Python
- Chi tiết về tham số:
str -- Là chuỗi để được ghi vào file.
- Trả về giá trị
Phương thức này không trả về bất cứ giá trị nào.
- Chương trình Python ví dụ:
Ví dụ sau minh họa cách sử dụng của write() trong Python
Giả sử có foo.txt file có nội dung:
Dong thu nhat: Ho va ten
Dong thu hai: Tuoi
Dong thu ba: Gioi tinh
Dong thu tu: Nghe nghiep
Dong thu nam: Tinh trang hon nhan
Mo mot file in write mode
fo = open("foo.txt", "rw+")
print "Ten cua file la: ", fo.name
Gia su trong file co 5 dong sau
Dong thu nhat: Ho va ten
Dong thu hai: Tuoi
Dong thu ba: Gioi tinh
Dong thu tu: Nghe nghiep
Dong thu nam: Tinh trang hon nhan
str = "\nDong thu sau: So thich"
Ghi mot line vao cuoi file da cho
fo.seek(0, 2)
line = fo.write( str )
Bay gio doc tu phan dau file.
fo.seek(0,0)
for index in range(6):
line = fo.next()
print "Line thu %d - %s" % (index, line)
Dong file da mo
fo.close()
Chạy chương trình Python trên sẽ cho kết quả:
Ten cua file la: foo.txt
Line thu 0 - Dong thu nhat: Ho va ten
Line thu 1 - Dong thu hai: Tuoi
Line thu 2 - Dong thu ba: Gioi tinh
Line thu 3 - Dong thu tu: Nghe nghiep
Line thu 4 - Dong thu nam: Tinh trang hon nhan
Line thu 5 - Dong thu sau: So thich
4. Đọc File trong Python
Ta có một số phương thức có thể lấy được nội dung của file
Phương thức read
Cú pháp:
<File>.read(size=-1)
Công dụng: 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.
- Sau khi đọc được nội dung, nó sẽ trả về dưới một dạng chuỗi.
- Nếu không đọc được gì, phương thức sẽ trả về một chuỗi có độ dài bằng 0
Ví dụ:
Python
fobj = open('kteam.txt')
data = fobj.read()
data
"LuatMinhKhue\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
print(data)
LuatMinhKhue
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
Dưới đây là một ví dụ về đọc từng số kí tự một
Python
fobj = open('kteam.txt')
fobj.read(2)
'Ho'
fobj.read(10)
'w LuatMinhKhue\nFr'
fobj.read(20)
'ee Education\n\nShare '
fobj.read()
"to better\n\nprint('hello world!')\n"
fobj.close()
Phương thức readline
Cú pháp:
<File>.readline(size=-1)
Công dụng: Với parameter size thì hoàn toàn tương tự như phương thức read.
- Khác biệt ở chỗ, phương thức readline chỉ đọc một dòng có nghĩa là đọc tới khi nào gặp newline hoặc hết file thì ngừng.
- Con trỏ file cũng sẽ đi từ dòng này qua dòng khác.
- Kết quả đọc được trả về dưới dạng một chuỗi.
- Nếu không đọc được gì, phương thức sẽ trả về một chuỗi có độ dài bằng
Ví dụ:
Python
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:
<File>.readlines(hint=-1)
Ở mức độ cơ bản, ta không phải quan tâm đến parameter 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: 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ụ:
Python
fobj = open('Luatminhkhue.txt')
list_content = fobj.readlines()
list_content
['How LuatMinhKhue\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.
Thế nên, ta có thể sử dụng constructor list
Python
fobj = open('Luatminhkhue.txt')
list_content = list(fobj)
list_content
['How LuatMinhKhue\n', 'Free Education\n', '\n', 'Share to better\n', '\n', "print('hello world!')\n"]
fobj.close()
Và cũng có thể là Tuple.
Python
fobj = open('kteam.txt')
tup_content = tuple(fobj)
tup_content
('How LuatMinhKhue\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.
5. 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:
<File>.write(text)
Công dụng: Phương thức này sẽ trả về số kí tự mà chúng ta ghi vào.
Ví dụ:
Python
fobj = open('luatminhkhue_2.txt', 'w')
fobj.write('The first line\n') # thêm \n để kết thúc 1 dòng
fobj.write('And last line too')
fobj.close()
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é.
Python
fobj = open('luatminhkhue_2.txt')
fobj.read()
'The first line\nAnd last line too'
fobj.close()
fobj = open('luatminhkhue_2.txt', 'w')
fobj.write('\none more line')
fobj.close()
fobj = open('luatminhkhue_2.txt')
fobj.read()
'\none more line'
fobj.close()
Đó 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.
Ta hãy mở lại file ta mới viết thêm một lần nữa.
Python
fobj = open('luatminhkhue_2.txt', 'a')
fobj.write('\nthe second line')
fobj.close()
fobj = open('kteam_2.txt')
fobj.read()
'\none more line\nthe second line'
fobj.close()
6. Kiểm soát con trỏ file
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ó.
Việc đó, ta sẽ nhờ tới phương thức seek
Phương thức seek
Cú pháp:
<File>.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.
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.
Ví dụ:
Python
fobj = open('luatminhkhue.txt')
fobj.read()
"How Kteam\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
fobj.read()
''
fobj.seek(0)
fobj.read()
"How luatminhkhue\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
fobj.seek(10)
fobj.read()
"\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
fobj.close()
7. Ưu điểm của đọc dữ liệu từ File trong Python:
- Linh hoạt:Xử lý file trong Python cho phép bạn triển khai một loạt các hoạt động như tạo, đọc, viết, bổ sung, đổi tên và xóa file.
- Linh động: Xử lý file trong Python có độ linh hoạt cao vì nó cho phép bạn hoạt động với các kiểu file khác nhau
- Thân thiện với người dùng: Xử lý file trong Python có độ linh hoạt cao vì nó cho phép bạn hoạt động với các kiểu file khác nhau
- Chéo nền tảng: Các hàm xử lý file trong Python hoạt động trên các nền tảng khác nhau (ví dụ: Windows, Mac, Linux)
Trên đây là bài viết của Luật Minh Khuê, hy vọng bài viết sẽ mang đến thông tin hữu ích cho bạn đọc, giúp bạn đọc giải đáp được thắc mắc cũng như có được đáp án cần tìm. Từ đó giúp bạn đọc củng cố thêm thông tin và kiến thức về Python. Xin trân trọng cảm ơn!