Làm việc với file (tệp) là chức năng quan trọng với bất kỳ hệ thống phần mềm nào. Các ngôn ngữ lập trình bậc cao nói chung và python nói riêng đều cung cấp cho chúng ta cơ chế để quản lý file bao gồm:
Mở file
Đọc file
Ghi ghi file
update file
Xóa file
Trong bài học này, chúng ta sẽ cùng nhau thảo luận về các thao tác trên.
Để mở file trong python, chúng ta hàm open() với cú pháp sau đây
<tên biến> = open("tên file", 'các chế độ mở và loại file cần mở')
Trong đó:
Tên biến: do người lập trình tự đặt theo quy tắc đặt tên
Tên file : tên file cần mở, file này được lưu trong ổ cứng
Các chế độ mở:
r: read - đọc
w: write - ghi
a: append - chèn vào cuối file
loại file cần mở:
t: text - chứa văn bản
b: binary - chứa dạng hình ảnh, âm thanh,...
Tuy nhiên, chế độ mặc định khi mở file là text, nên nếu mục đích là mở đúng loại này, chúng ta không cần ghi loại file mà chỉ cần ghi chế độ mở là được.
Ví dụ:
Chúng ta tạo sẵn một file text tên Testfile.txt có nội dung như sau:
Welcome to Testfile.txt!
This file contain some line of integers
Each of the following lines contains 2 integers corresponding to the length and width of each rectangle
4 5
7 8
9 13
7 18
Trong chương trình python, ta viết lệnh để mở file Testfile.txt ở chế độ đọc như sau:
f = open("Testfile.txt",'r')
Lưu ý là file chương trình python và file chứa dữ liệu phải nằm cùng thư mục, nếu chúng nằm khác thư mục, chúng ta phải dùng đường dẫn tuyệt đối trong phần tên file.
Thao tác đọc file dùng để đọc dữ liệu từ file lên chương trình python để xử lý, chúng ta có nhiều cách đọc file như đọc hết toàn bộ nội dung file hay từng dòng trong file. Sau đây là hai cách cơ bản
Cú pháp:
<Tên biến>.read()
Trong đó:
<Tên biến>: là biến đã dùng để mở file
Ví dụ:
f = open("Testfile.txt", 'r')
print(f.read())
Kết quả ra màn hình là toàn bộ nội dung trong file Testfile.txt
Welcome to Testfile.txt!
This file contain some line of integers
Each of the following lines contains 2 integers corresponding to the length and width of each rectangle
4 5
7 8
9 13
7 18
Nhiệm vụ 1. Tạo một file text với tên DanhSachHS.txt. Trong file này chứa thông tin họ tên của 5 bạn trong lớp em, có đánh số thứ tự từng tên. Viết chương trình python để đọc và xuất hết nội dung trong file DanhSachHS.txt ra màn hình.
Các em cũng có thể đọc một vài ký tự của file bằng cách thêm số lượng ký tự vào trong hàm read()
Ví dụ:
f = open("Testfile.txt", 'r')
print(f.read(7))
Kết quả ra màn hình là 7 ký tự đầu trong file Testfile.txt
Welcome
Nhiệm vụ 2. Viết chương trình python khác, cũng mở file DanhSachHS.txt, nhưng trong chương trình yêu cầu người dùng nhập vào số ký tự muốn đọc k. Sau đó xuất ra đúng k ký tự đầu của file.
Để đọc từng dòng trong file chúng ta có rất nhiều cách khác nhau. Trong phạm vi bài này, chúng ta chỉ đề cập đến cách sử dụng lệnh readline()
Cú pháp:
<tên biến>.readline()
Ví dụ:
f = open("Testfile.txt", 'r')
print(f.readline())
Kết quả ra màn hình là 7 ký tự đầu trong file Testfile.txt
Welcome to Testfile.txt!
Nếu muốn tiếp tục xuất các dòng tiếp theo, chúng ta viết tiếp các dòng readline() liền sau.
Ví dụ:
f = open("Testfile.txt", 'r')
print(f.readline())
print(f.readline())
Kết quả ra màn hình là 7 ký tự đầu trong file Testfile.txt
Welcome to Testfile.txt!
This file contain some line of integers
Hoặc có thể dùng vòng lặp đơn giản sau để duyệt qua từng dòng và xuất ra:
f = open("Testfile.txt", 'r')
for x in f:
print(x)
Nhiệm vụ 3. Cũng mở file file DanhSachHS.txt, nhưng chỉ đọc và xuất ra 2 dòng đầu của file.
Để đọc hết dữ liệu trong file, ngoài cách dùng read() chúng ta còn có thể dùng readlines().
Lệnh readlines() thực chất là load hết dữ liệu trong file vào bộ nhớ đệm (cache) ở dạng list các xâu, nên muốn xuất dòng nào ra màn hình, các em chỉ định ngay dòng đó bằng chỉ số
Ví dụ:
f = open("Testfile.txt", 'r')
print(f.readlines()[3])
Kết quả xuất ra màn hình:
4 5
Nhiệm vụ 4. Cũng mở file DanhSachHS.txt, nhưng trong chương trình python yêu cầu người dùng nhập vào dòng muốn đọc, sau khi người dùng nhập vào số thứ tự của dòng nào thì đọc và xuất đúng dòng đó lên màn hình
Nhiệm vụ 5. Cũng mở file DanhSachHS.txt, nhưng trong chương trình python yêu cầu người dùng nhập vào số dòng muốn đọc, sau khi người dùng nhập vào số dòng n, lặp lại đúng n lần, mỗi lần yêu cầu người dùng nhập số thứ tự của dòng muốn đọc. Người dùng nhập vào số nào thì đọc và xuất đúng dòng đó lên màn hình.
Nhiệm vụ 6. Tạo một file tên HCNINP.txt, trong file này chứa đúng hai số nguyên cách nhau bằng 1 khoảng trắng tương ứng cho chiều dài và rộng của HCN. Viết chương trình python đọc dữ liệu từ file này, tính diện tích hình chữ nhật đó và xuất ra màn hình.
Nhiệm vụ 7. Tạo một file tên HCNINP2.txt, trong file này chứa N+1 dòng. Dòng đầu tiên là số nguyên N. N dòng tiếp theo, mỗi dòng chứa 2 số nguyên a, b cách nhau bằng 1 khoảng trắng. Viết chương trình python để đọc vào số nguyên N từ file HCNINP2.txt này, sau đó thực hiện N lần việc đọc hai giá trị a, b rồi tính s = a*b, xuất s ra màn hình.
Nếu số số N < 0 thì xuất ra câu "Dữ liệu trong file không hợp lệ"
Thao tác ghi file giúp chúng ta ghi dữ liệu từ chương trình python xuống python. Lệnh ghi dữ liệu xuống file có cú pháp như sau:
<Tên biến>.write(<các giá trị cần ghi>)
Để ghi vào file text, các giá trị cần ghi phải ở dạng text. Ngoài ra, các em còn phải chú ý đến hai chế độ ghi là 'a' hay 'w'.
Trước khi ghi sẽ xóa sạch nội dung trong file, thao tác này dùng chế độ mở file là 'w'
Ví dụ:
f2 = open("TestfileOut.txt", 'w')
f2.write("Hello, this is new contents in TestfileOut.txt")
Khi chạy (thực thi) chương trình python trên, nếu trong thư mục hiện hành có sẵn file TestfileOut.txt thì nó sẽ mở file này lên, xóa hết nội dung trong file rồi ghi nội dung mới vào. Nếu như trong thư mục hiện hành không có sẵn file này, nó cũng tự động tạo ra file này rồi ghi nội dung vô.
TestfileOut.txt
Hello, this is new contents in TestfileOut.txt
Nhiệm vụ 8. Thực hiện giống nhiệm vụ 6, nhưng thay vì xuất s ra màn hình thì ghi s vào file "HCNOUT.txt"
Nhiệm vụ 9. Tạo một file tên "HINHTRONINP.txt", trong file này chứa một số thực duy nhất là bán kính R của hình tròn. Viết chương trình python để đọc file này, đọc giá trị R rồi tính chu vi C và diện tích S của hình tròn. Ghi giá trị của C và S vào file "HINHTRONOUT.txt" mỗi số trên một dòng.
Ghi tiếp nội dung mới vào cuối file, thao tác này dùng chế độ mở file là 'a'
Ví dụ:
f2 = open("TestfileOut.txt", 'a')
f2.write("And, this is new contents was added to the end of TestfileOut.txt")
Khi chạy (thực thi) chương trình python trên, nếu trong thư mục hiện hành có sẵn file TestfileOut.txt thì nó sẽ mở file này lên rồi ghi thêm nội dung mới vào cuối. Nếu như trong thư mục hiện hành không có sẵn file này, nó cũng tự động tạo ra file này rồi ghi nội dung vô.
TestfileOut.txt
Hello, this is new contents in TestfileOut.txt And, this is new contents was added to the end of TestfileOut.txt
Nhiệm vụ 10. Thực hiện lại nhiệm vụ 8, nhưng thay vì xuất các diện tích ra màn hình thì ghi các diện tích vào file HCNOUT2.txt mỗi số trên một dòng.
Sau khi thực hiện xong thao tác với file bất kể là đọc hay ghi, các em nên đóng file nhằm tránh những sai sót như file tiếp tục bị ghi gì đó ngoài kiểm soát.
<Tên biến>.close()
Ví dụ:
f = open("Testfile.txt", 'r')
print(f.readlines()[3])
f.close()
Sau khi xuất xong dữ liệu ở dòng 4 ra màn hình, file Testfile.txt sẽ được đóng lại.
Lệnh xóa file trong python được viết trong thư viện os, nên các em phải gọi thư viện này trước khi gọi lệnh xóa file.
import os
os.remove(tên file)
Ví dụ:
import os
os.remove("Testfile2.txt")
Nếu trong thư mục hiện hành có file Testfile2.txt thì chương trình sẽ tiến hành xóa file này, nếu không tồn tại sẽ báo lỗi. Để tránh tình trạng này, chúng ta nên kiểm tra tình trạng tồn tại của file trước khi gọi lệnh xóa
Ví dụ:
import os
if os.path.exists("Testfile2.txt"):
os.remove("Testfile2.txt")
print("File Testfiles.txt has deleted")
else:
print("The file does not exist")
Bài 1. Tạo một file DaySoINP.txt, file này chứa hai dòng, dòng đầu tiên chứa số nguyên N, dòng thứ 2 chứa N số nguyên ngẫu nhiên. Viết chương trình Python để mở file này, đọc giá trị N sau đó đọc N số nguyên ở dòng 2. Ghi ra file DaySoOUT.txt là các số chẵn của dãy trong file INP, mỗi số cách nhau bằng 1 khoản trắng.
Bài 2. Tạo một file DaySoINP2.txt, file này chứa hai dòng, dòng đầu tiên chứa số nguyên N, dòng thứ 2 chứa N số nguyên ngẫu nhiên. Viết chương trình Python để mở file này, đọc giá trị N sau đó đọc N số nguyên ở dòng 2. Ghi ra file DaySoOUT2.txt một giá trị duy nhất là tổng các số bội 3 của dãy trong file INP2.
Bài 3. Tạo một file UOCINO.txt, file này chứa một số nguyên N duy nhất. Viết chương trình python để đọc giá trị của N rồi ghi ra file UOCOUT.txt là dãy các nguyên dương của N, mỗi số cách nhau 1 khoảng trắng.
Bài 4. Tạo một file TBCINP.txt, dòng đầu tiên chứa số nguyên N. N dòng tiếp theo, mỗi dòng chứa đúng 1 số nguyên. Viết chương trình Python để đọc giá trị từ file này và ghi vào file TBCOUT.txt giá trị trung bình cộng của N số trên.
Bài 5. Tạo một file TBCINP2.txt, dòng đầu tiên chứa số nguyên N. N dòng tiếp theo, mỗi dòng chứa một dãy số nguyên. Viết chương trình Python để đọc giá trị từ file này và ghi vào file TBCOUT2.txt, cứ mỗi dòng ghi giá trị trung bình cộng của các số trên dòng đó.
Bài 6. Tạo một file TBCINP3.txt, file này có nhiều dòng (chưa biết bao nhiêu dòng), mỗi dòng chứa một dãy số nguyên. Viết chương trình Python để đọc giá trị từ file này và ghi vào file TBCOUT3.txt, cứ mỗi dòng ghi giá trị trung bình cộng của các số trên dòng đó.
Bài 7. Tạo một file TBCINP4.txt, file này có nhiều dòng (chưa biết bao nhiêu dòng), mỗi dòng chứa một dãy số nguyên. Viết chương trình Python cho phép người dùng nhập vào một số nguyên k rồi đọc giá trị từ file TBCINP4.txt tại đúng dòng thứ k và ghi vào file TBCOUT4.txt giá trị trung bình của các số trên dòng thứ k đó.