--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Docker (1) - Làm quen với Docker

1. Làm quen với Docker

1.1 Docker là gì?

Docker: nghĩa tiếng Việt là “Nhân viên bốc xếp trên bến cảng”. Công việc của anh ta là bốc xếp hàng hóa vào các thùng chứa hàng tiêu chuẩn (gọi là các công-ten-nơ - container). Vậy, trong lĩnh vực phần mềm, bạn có thể hình dung ra chức năng của Docker rồi.

Docker là một nền tảng, dùng để "đóng gói" ứng dụng cùng với các thư viện, môi trường cần thiết vào một thùng chứa gọi là container.

Vì Docker là một nền tảng (platform), nên nó sẽ gồm nhiều thành phần khác nhau.

Xem biểu tượng của Docker.

Dùng docker có lợi gì?

- Giúp mã nguồn chạy ổn định, với cùng kết quả trên máy cá nhân, máy đồng nghiệp và máy chủ

- Bạn có thể chạy ứng dụng với các phiên bản ngôn ngữ khác nhau (ví dụ Python 2 và Python 3) trên cùng một máy mà không sợ xung đột

- Thiết lập môi trường và chạy ứng dụng chỉ trong vài giây thay vì phải cài đặt, thiết lập môi trường thủ công mất nhiều giờ

1.2 Các thành phần chính của Docker

Như đã đề cập, Docker là một nền tảng, nên nó gồm nhiều thành phần, cụ thể gồm:

- Docker Engine

- Docker Image

- Docker Container

- Docker Registry

Chúng ta cùng tìm hiểu sơ lược về các thành phần trên.

Docker Engine

Docker Engine là một ứng dụng mã nguồn mở theo mô hình client-server, dùng để để khởi tạo, vận hành và quản lý các Docker Container.

Để dễ hình dung, trên bến cảng, docker engine là hệ thống để vận hành bến cảng, gồm máy móc, cần cẩu, ban quản lý.

Docker Engine gồm 3 thành phần:

- Docker Daemon: Người thực hiện

- REST API: Hệ thống truyền tin

- Docker CLI: Người điều khiển

Bạn có thể hình dung hoạt động của Docker Engine theo quy trình như sau: Người điều khiển > Hệ thống truyền tin > Người thực hiện. Cụ thể: Docker CLI ra lệnh > lệnh được truyền dưới dạng REST API > Docker Daemon nhận lệnh, và thực hiện nhiệm vụ.

Phần mềm Docker Engine có thể chạy trực tiếp trên hệ thống Linux.

Phần mềm Docker Engine không thể chạy trực tiếp trên hệ thống Windows, nên người ta đã tạo ra phần mềm Docker Desktop để bọc Docker Engine ở trong đó.

1.3 Tải và cài đặt Docker Desktop 

Để cài đặt Docker Desktop, bạn hãy thực hiện theo các bước dưới đây.

Trước khi cài đặt, hãy đảm bảo máy tính của bạn đã bật tính năng virtualization (ảo hóa) trong BIOS (thường là mặc định đã bật trên các máy đời mới).

Để kiểm tra xem tính năng virtualization đã được bật hay chưa mà không cần phải khởi động lại máy để vào BIOS, bạn có thể thực hiện trên Windows theo cách sau:

- Nhấn tổ hợp phím Ctrl + Shift + Esc để mở Task Manager

- Nếu bảng hiện ra bị nhỏ, thiếu thông tin, hãy nhấn vào More details ở góc dưới

- Chọn tab Performance

- Chọn mục CPU

- Nhìn xuống góc dưới bên phải, tìm dòng chữ Virtualization. Nếu nó hiện là Enabled: Chúc mừng bạn, mọi thứ đã sẵn sàng. Nếu nó hiện là Disabled: Bạn bắt buộc phải vào BIOS để bật nó lên.

Bước 1: Tải bộ cài đặt

- Truy cập vào trang chủ chính thức của Docker: docker.com/products/docker-desktop

- Chọn phiên bản phù hợp với hệ điều hành của bạn, ví dụ: Download for Windows

Bước 2: Cài đặt (dành cho Windows)

- Chạy tập tin .exe vừa tải về

- Lưu ý: Khi hiện thông báo lựa chọn, hãy tích chọn "Use WSL 2 instead of Hyper-V". Đây là công nghệ mới giúp Docker chạy nhanh và mượt hơn rất nhiều trên Windows

- Nhấn OK và chờ quá trình giải nén, cài đặt hoàn tất

- Sau khi xong, máy tính có thể yêu cầu bạn Khởi động lại

Bước 3: Cấu hình WSL 2 (Nếu Windows yêu cầu)

Nếu sau khi khởi động, Docker báo lỗi "WSL 2 installation is incomplete", bạn chỉ cần:

- Tải gói cập nhật nhân Linux của Microsoft (theo đường dẫn Docker cung cấp trên màn hình)

- Mở PowerShell với quyền Admin và gõ lệnh: wsl --set-default-version 2

Hoặc, bạn sẽ được yêu cầu cập nhật phiên bản mới của wsl bằng cách chạy lệnh sau trong PowerShell:

wsl --update

Bước 4: Kiểm tra thành quả

- Sau khi cài đặt xong, bạn mở ứng dụng Docker Desktop lên. Chờ cho biểu tượng "chú cá voi" ở góc màn hình (trong system tray) ngừng nhấp nháy.

- Để chắc chắn "anh nhân viên bốc xếp" đã sẵn sàng, bạn mở Terminal (hoặc CMD/PowerShell) và gõ:

docker version

Nếu màn hình hiện ra thông tin phiên bản của cả Client và Server, chúc mừng bạn! Bạn đã mang được bến cảng Docker về máy mình thành công.

1.4 Bài tập và câu hỏi

Bài tập 1a. Tải và cài đặt Docker Desktop trên máy của bạn.

Câu hỏi ôn tập

Câu 1.1 Trong mô hình hoạt động của Docker Engine, thành phần nào đóng vai trò là "Người thực hiện" (nhận lệnh và trực tiếp xử lý các nhiệm vụ)?

A. Docker CLI

B. REST API

C. Docker Daemon

D. Docker Desktop

Câu 1.2 Khi cài đặt Docker Desktop trên Windows, công nghệ nào được khuyến khích sử dụng để giúp ứng dụng chạy nhanh và mượt mà hơn?

A. Hyper-V

B. WSL 2

C. Virtualization trong BIOS

D. REST API

Câu 1.3 Đâu là một trong những lợi ích chính của việc sử dụng Docker được đề cập trong tài liệu?

A. Chỉ chạy được trên hệ điều hành Linux

B. Giúp mã nguồn chạy ổn định và ra cùng kết quả trên nhiều môi trường máy tính khác nhau

C. Tăng dung lượng bộ nhớ của máy tính cá nhân

D. Thay thế hoàn toàn các nhân viên bốc xếp tại bến cảng

-----
Bài sau:

Python (2y) - Thực hành thao tác với tập tin văn bản

Bài trước: Python (2x) - Thao tác với tập tin văn bản
-----

24. Thực hành thao tác với tập tin văn bản

Ở bài học trước, bạn đã được học cách thao tác với tập tin văn bản. Để giúp bạn rèn luyện thêm, bài học này bao gồm các bài tập để bạn thực hành. Làm nhiều thì sẽ quen tay, nghĩ nhiều thì quen não, bạn hãy tự nghĩ ra cách làm, viết giải thuật ra giấy, và gõ từng dòng mã để giúp nâng cao khả năng tư duy của bạn.

24.1 Thao tác với tập tin .txt

Bài 24a: Đếm số từ

Cho tập tin van_ban.txt chứa một đoạn văn tiếng Việt không dấu. Hãy viết chương trình:

- Đọc nội dung từ tập tin

- Đếm xem trong đoạn văn có bao nhiêu từ (các từ cách nhau bằng khoảng trắng)

- Ghi kết quả vào tập tin ket_qua.txt

Bài 24b: Tìm số lớn nhất

Cho tập tin day_so.txt gồm nhiều dòng (tối thiểu 10 dòng), mỗi dòng chứa một số nguyên.

- Đọc toàn bộ các số nguyên trong tập tin

- Tìm số lớn nhất và số nhỏ nhất trong dãy số đó

- Ghi dòng chữ "Số lớn nhất là: ..." và "Số nhỏ nhất là: ..." vào tập tin thong_ke.txt

Bài 24c: Kiểm tra số nguyên tố

Cho tập tin input.txt chứa một số nguyên dương n

- Đọc giá trị n từ tập tin

- Kiểm tra xem n có phải là số nguyên tố hay không

- Nếu là số nguyên tố, ghi "YES" vào tập tin output.txt. Ngược lại ghi "NO"

24.2 Bài tập về tập tin CSV

Tập tin CSV thường được dùng để quản lý danh sách có cấu trúc cột rõ ràng, giống như quản lý học sinh hoặc kho hàng.

Bài 24d: Quản lý thư viện

Tạo danh sách gồm 3 cuốn sách bạn yêu thích (Tên sách, Tác giả).

- Ghi danh sách này vào tập tin thu_vien.csv

- Viết chương trình đọc lại tập tin này và in ra màn hình theo định dạng: "Cuốn sách [Tên sách] được viết bởi [Tác giả]".

Bài 24e: Tính điểm trung bình

Cho tập tin bang_diem.csv có cấu trúc: Tên,Toán,Văn. 

Ví dụ: 

[bang_diem.csv]

Tên,Toán,Văn 

Nguyen Van An,8,9 

Le Thi Binh,10,7 

Tran Huu Loc,6.5,8

- Đọc dữ liệu từ tập tin

- Tính điểm trung bình (ĐTB = (Toán + Văn) / 2) cho từng học sinh

- Ghi thêm một cột "Trung Bình" vào tập tin mới đặt tên là ket_qua_hoc_tap.csv.

Bài 24f: Lọc dữ liệu 

Cho tập tin san_pham.csv chứa danh sách hàng hóa: Tên SP,Giá Tiền.

Ví dụ:

[san_pham.csv]

Tên SP,Giá Tiền 

Chuột máy tính,250000 

Bàn phím cơ,850000 

Tai nghe,450000

Lót chuột,100000 

Loa Bluetooth,1200000

- Viết chương trình yêu cầu người dùng nhập vào một mức giá ngân sách (ví dụ: 500.000)

- Tìm và liệt kê tất cả các sản phẩm có giá thấp hơn hoặc bằng mức ngân sách đó

- Lưu danh sách các sản phẩm thỏa mãn vào tập tin mua_sam.csv


-----
Bài sau:

Python (2x) - Thao tác với tập tin văn bản

Bài trước:
-----

23. Thao tác với tập tin văn bản

Ở các bài học trước, khi bạn chạy một chương trình và nhập dữ liệu (như họ tên, điểm số), dữ liệu đó chỉ tồn tại tạm thời trên bộ nhớ (RAM). Khi bạn tắt chương trình, mọi dữ liệu sẽ biến mất. Để lưu giữ dữ liệu lâu dài, chúng ta cần ghi chúng vào các tập tin (file) trên ổ cứng.

23.1 Các thao tác với tập tin

Thao tác với tập tin giống như việc bạn sử dụng một cuốn sổ tay để ghi chép. Để sử dụng, bạn cần thực hiện 3 bước cơ bản:

- [1] Mở sổ tay (open): Mở tập tin để sẵn sàng đọc hoặc ghi

- [2] Sử dụng sổ tay (read/write): Đọc thông tin từ sổ tay hoặc viết thông tin mới vào

- [3] Đóng sổ tay (close): Cất sổ tay đi để bảo đảm thông tin không bị mất

Chúng ta sẽ thực hành trên 2 kiểu tập tin văn bản là .txt và .csv.

23.2 Thao tác với tập tin .txt

Bạn hãy thực hiện các bước sau, để trải nghiệm việc thao tác với tập tin:

- Tạo một tập tin có tên chao_mung.txt. Viết dòng chữ “Chào mừng bạn đến với khóa học Python!” vào tập tin chao_mung.txt. Lưu ý: tập tin chao_mung.txt phải nằm cùng thư mục với tập tin mã nguồn TapTin.py

- Viết đoạn mã Python sau vào tập tin TapTin.py

[TapTin.py]

# Bước 1: Mở tập tin

f = open("chao_mung.txt", "r", encoding="utf-8")


# Bước 2: Đọc nội dung và in ra màn hình

noi_dung = f.read()

print(noi_dung)


# Bước 3: Đóng tập tin

f.close()

Ở đoạn mã trên, bạn đã:

- Sử dụng hàm open() để mở một tập tin có sẵn (chao_mung.txt

- Sử dụng tham số “r” (read) để đọc nội dung tập tin

- Sử dụng bảng mã encoding="utf-8" giúp máy tính đọc được các chữ có dấu tiếng Việt

- Sử dụng biến f để tham chiếu tới tập tin, và thực hiện các thao tác khác trên tập tin

- Sử dụng hàm read() để đọc toàn bộ nội dung tập tin

- Sử dụng hàm close() để đóng tập tin

Ghi nội dung vào tập tin

Để ghi dữ liệu, chúng ta có hai chế độ chính:

- "w" (Write): Xóa hết nội dung cũ và ghi mới hoàn toàn

- "a" (Append): Ghi thêm nội dung vào cuối tập tin cũ

Ví dụ minh họa:

[GhiTapTin.py]

# Ghi mới vào tập tin

f = open("nhat_ky.txt", "w", encoding="utf-8")

f.write("Hôm nay tôi bắt đầu học về tập tin trong Python.\n")

f.write("Lập trình thật thú vị!")

f.close()


Khi chạy đoạn mã trên, nếu chưa có sẵn tập tin nhat_ky.txt, Python sẽ tạo mới tập tin và ghi nội dung vào tập tin vừa tạo. Python sử dụng tham số “w” (write, viết) trong hàm open() để báo là mở tập tin để ghi nội dung; sử dụng hàm write() để ghi nội dung vào tập tin.


Ghi thêm nội dung vào cuối tập tin cũ


Kiểu ghi nội dung này rất hữu ích khi bạn muốn ghi nhật ký (log) hoặc ghi thêm dữ liệu mới mà không làm mất đi những gì đã có sẵn trong tập tin. Sử dụng tham số “a” khi mở tập tin (a là viết tắt của append - gắn vào cuối).


Ví dụ:


Giả sử bạn đã có một tập tin tên là nhat_ky.txt với nội dung cũ. Bây giờ chúng ta sẽ ghi thêm một dòng mới vào cuối tập tin đó.


[GhiVaoCuoi.py]


# Bước 1: Mở tập tin ở chế độ "a" (Append)

# encoding="utf-8" giúp ghi được tiếng Việt có dấu

file = open("nhat_ky.txt", "a", encoding="utf-8")


# Bước 2: Ghi thêm nội dung mới

# Sử dụng ký tự \n để dòng mới được xuống hàng, không bị dính liền với dòng cũ

file.write("\n10:00 AM - Đã hoàn thành bài tập Python về tập tin.")


# Bước 3: Đóng tập tin

file.close()


print("Đã ghi thêm nội dung thành công!")


Giải thích đoạn mã trên:


open("nhat_ky.txt", "a"):


- Nếu tập tin nhat_ky.txt đã tồn tại: Python sẽ đặt "con trỏ" ở cuối tập tin (tạm hiểu con trỏ là dấu nháy khi soạn thảo văn bản). Mọi nội dung bạn ghi sau đó sẽ nối tiếp vào đuôi


- Nếu tập tin nhat_ky.txt chưa tồn tại: Python sẽ tự động tạo một tập tin mới hoàn toàn


- \n: Đây là ký tự xuống dòng. Nếu bạn không thêm \n, nội dung mới sẽ nằm ngay sát sau ký tự cuối cùng của nội dung cũ


- Sự khác biệt của tham số "a" với "w": Nếu bạn dùng "w", toàn bộ nội dung cũ trong nhat_ky.txt sẽ bị xóa sạch trước khi ghi mới. Với "a", nội dung cũ được giữ nguyên.


Cách viết an toàn hơn (Khuyên dùng)


Trong thực tế, các lập trình viên kinh nghiệm thường dùng từ khóa with để tránh việc quên đóng tập tin (close()):


Ví dụ:


with open("nhat_ky.txt", "a", encoding="utf-8") as file:

    file.write("\n11:30 AM - Chuẩn bị nghỉ trưa.")

# Khi dùng 'with', file sẽ tự động đóng sau khi chạy hết khối lệnh bên trong.


Xóa tập tin

Trong lập trình, việc xóa các tập tin không còn sử dụng (như tập tin tạm, tập tin lịch sử cũ) là rất quan trọng để tiết kiệm không gian đĩa cứng. Để xóa tập tin trong Python, chúng ta cần dùng đến thư viện có sẵn tên là os (viết tắt của Operating System - Hệ điều hành).

Để xóa một tập tin, chúng ta sử dụng hàm os.remove().

Lưu ý: Khi bạn dùng lệnh xóa tập tin trong lập trình, tập tin sẽ bị xóa vĩnh viễn và không nằm trong "Thùng rác" (Recycle Bin) của máy tính. Vì vậy, bạn hãy cẩn thận.

Ví dụ:

Tạo sẵn một tập tin để xóa, ví dụ: FileTam.txt

import os  # Bước 1: Phải nạp thư viện os

# Bước 2: Gọi lệnh xóa

os.remove("FileTam.txt")

print("Đã xóa tập tin thành công!")

Cách xóa tập tin an toàn (Kiểm tra trước khi xóa)

Nếu bạn ra lệnh xóa một tập tin không tồn tại, chương trình sẽ bị "treo" và báo lỗi ngay lập tức. Một lập trình viên kinh nghiệm sẽ luôn kiểm tra xem tập tin đó có thực sự tồn tại hay không trước khi xóa.

Ví dụ:

import os


ten_file = "lich_su_cu.txt"


# Kiểm tra xem file có tồn tại trên ổ cứng không

if os.path.exists(ten_file):

    os.remove(ten_file)

    print(f"Đã xóa xong tập tin: {ten_file}")

else:

    print("Thông báo: Tập tin này không tồn tại nên không thể xóa.")

23.3 Thao tác với tập tin .csv

Tập tin CSV (Comma Separated Values) là loại tập tin mà các giá trị được ngăn cách bởi dấu phẩy. Nó trông giống như một bảng tính Excel đơn giản.

Ví dụ: ghi danh sách học sinh và điểm vào tập tin CSV:


import csv # Nạp thư viện hỗ trợ tập tin CSV


danh_sach = [

    ["Tên", "Điểm"],

    ["Tèo", 9],

    ["Bình", 10]

]


with open("diem_so.csv", "w", newline="", encoding="utf-8") as f:

    writer = csv.writer(f)

    writer.writerows(danh_sach)

# Dùng 'with' giúp tự động đóng tập tin, bạn không cần gọi f.close()

Giải thích đoạn mã trên:


- Đoạn mã trên sẽ tạo ra một bảng điểm và lưu nó vào một tập tin có thể mở được bằng Excel, nhờ vào đuôi của tập tin là .csv.

import csv

- Gọi thư viện của Python (csv), để dùng các hàm có sẵn khi làm việc với tập tin .csv

danh_sach = [

    ["Tên", "Điểm"],

    ["Tèo", 9],

    ["Bình", 10]

]

- Tạo danh sách lồng nhau (List of Lists). Mỗi danh sách con bên trong (như ["Tèo", 9]) đại diện cho một hàng trong bảng. Các phần tử trong danh sách con đại diện cho các cột (cột Tên và cột Điểm)

with open(...) as f:

- "diem_so.csv": Tên tập tin bạn muốn tạo ra

- "w" (Write): Chế độ ghi. Nếu tập tin đã có, nó sẽ xóa sạch để ghi mới. Nếu chưa có, nó sẽ tạo tập tin mới

- newline="": Một tham số để đảm bảo khi ghi tập tin trên các hệ điều hành khác nhau (Windows, Mac) sẽ không bị xuất hiện các dòng trống thừa

- encoding="utf-8": để làm việc với chữ có dấu tiếng Việt

- with...as f: Đây là cách viết thông minh. Nó mở tập tin ra và đặt tên tạm gọi là f. Khi chạy xong các lệnh thụt lề bên trong, Python sẽ tự động đóng tập tin lại cho bạn, giúp an toàn dữ liệu

writer = csv.writer(f)

- Tạo ra một "thợ viết" (đối tượng writer). Thợ viết này biết cách cầm "bút" f để ghi dữ liệu theo đúng định dạng CSV (ngăn cách nhau bằng dấu phẩy)

writer.writerows(danh_sach)

- Lệnh này yêu cầu "thợ viết" lấy toàn bộ các hàng trong danh_sach và chép vào tập tin. Kết quả là bạn sẽ có một bảng dữ liệu ngăn nắp

Sau khi chạy đoạn mã trên, vào thư mục chứa tập tin mã nguồn, bạn sẽ thấy một tập tin mới tên là diem_so.csv. Khi mở bằng Notepad, nó sẽ trông như thế này:

Tên,Điểm

Tèo,9

Bình,10

Nhưng khi mở bằng Excel hoặc Google Sheets, nó sẽ hiện ra thành một bảng tính với cột Tên và cột Điểm rõ ràng.

23.4 Bài tập và câu hỏi

Bài tập

Bài tập 23a: Viết chương trình máy tính thực hiện liên tục các phép tính: cộng, trừ, nhân, chia, và số mũ hai số. Sau khi tính xong, hãy ghi các phép tính đó vào tập tin lich_su.txt.

Ví dụ: Nếu nhập 5 + 3, tập tin sẽ ghi: 5 + 3 = 8

Bài tập 23b: Nâng cấp máy tính ở bài 23a. Khi bắt đầu chạy chương trình, máy tính sẽ đọc tập tin lich_su.txt và hiển thị lại một phép tính gần nhất đã thực hiện trước đó.

Bài tập 23c: Tạo một tập tin cai_dat.csv lưu cấu hình máy tính gồm: TenMayTinh, MauSac. Viết chương trình cho phép người dùng thay đổi tên máy tính và màu sắc hiển thị, sau đó lưu lại vào file CSV này để lần sau mở lên máy tính vẫn nhớ tên đó.

Câu hỏi ôn tập

Câu hỏi 23.1: Để mở một tập tin chỉ để đọc thông tin, bạn sử dụng chế độ nào trong hàm open()?

A. "w" 

B. "a" 

C. "r" 

D. "x"

Câu hỏi 23.2: Tại sao chúng ta nên sử dụng lệnh f.close() sau khi thao tác xong với tập tin? 

A. Để giải phóng bộ nhớ và đảm bảo dữ liệu được lưu an toàn

B. Để chương trình chạy nhanh hơn

C. Để xóa nội dung tập tin

D. Không cần thiết phải đóng tập tin

Câu hỏi 23.3: Sự khác biệt chính giữa chế độ "w" và "a" khi ghi tập tin là gì? 

A. "w" dùng cho tập tin văn bản, "a" dùng cho tập tin số

B. "w" xóa nội dung cũ để ghi mới, "a" ghi thêm vào cuối tập tin 

C. "w" chỉ ghi được một dòng, "a" ghi được nhiều dòng

D. Không có sự khác biệt

23. File Handling in Python

In previous lessons, when you ran a program and entered data (such as names or scores), that data existed only temporarily in RAM. When the program closes, all that data is lost. To store data permanently, we must write it to files on the hard drive.

23.1 File Operations

Working with files is like using a physical notebook. There are 3 essential steps:

- [1] Open: Open the file to prepare it for reading or writing.

- [2] Process (Read/Write): Read information from the file or write new data into it.

- [3] Close: Close the file to ensure data is saved and resources are released.

We will practice with two common text file formats: .txt and .csv.

23.2 Working with .txt Files

Follow these steps to experience basic file handling:

- Create a file named welcome.txt in the same folder as your Python script

- Write the text: "Welcome to the Python course!" inside it

- Create a Python file named FileHandling.py and enter the following code

[FileHandling.py]

# Step 1: Open the file

f = open("welcome.txt", "r", encoding="utf-8")


# Step 2: Read content and print to console

content = f.read()

print(content)


# Step 3: Close the file

f.close()

Key terms in the code:

- open(): Function to open a file

- "r" (Read): The mode used to read file content

- encoding="utf-8": Ensures the computer correctly reads special characters (like Vietnamese accents)

- f: The file object (variable) used to reference and manipulate the file

- read(): Method to read the entire content of the file

- close(): Method to close the file

Writing Data to a File

There are two primary modes for writing data:

- "w" (Write): Overwrites the file. It deletes existing content and starts fresh

- "a" (Append): Adds new content to the end of the existing file

Example: Writing a new file [WriteFile.py]

# Writing to a file (Overwrite mode)

f = open("diary.txt", "w", encoding="utf-8")

f.write("Today I started learning about file handling in Python.\n")

f.write("Programming is fun!")

f.close()

If diary.txt does not exist, Python will automatically create it.

Example: Appending data Appending is useful for creating logs or adding data without losing previous records. Use the "a" mode (short for append).

[AppendFile.py]

# Step 1: Open file in "a" mode

file = open("diary.txt", "a", encoding="utf-8")


# Step 2: Append new content

# \n is the newline character so the text starts on a new line

file.write("\n10:00 AM - Completed the Python file exercise.")


# Step 3: Close the file

file.close()

print("Content appended successfully!")


Note: The difference between "a" and "w" is that "w" wipes the file clean before writing, while "a" keeps the old data and places the "cursor" at the end.

The Recommended Way: The with Statement

Professional developers use the with keyword. It is safer because it automatically closes the file even if an error occurs.

with open("diary.txt", "a", encoding="utf-8") as file:

    file.write("\n11:30 AM - Preparing for lunch break.")

# No need for file.close() - it happens automatically!

Deleting Files

To delete files, we use the os (Operating System) module. Warning: Files deleted this way do not go to the Recycle Bin; they are permanently removed.

import os


filename = "temp_file.txt"


# Safe deletion: Check if the file exists first

if os.path.exists(filename):

    os.remove(filename)

    print(f"Deleted: {filename}")

else:

    print("Error: File does not exist.")

23.3 Working with .csv Files

CSV (Comma Separated Values) files store data separated by commas, making them compatible with spreadsheet software like Excel.

Example: Saving a grade list

import csv 


data = [

    ["Name", "Score"],

    ["Teo", 9],

    ["Binh", 10]

]


with open("grades.csv", "w", newline="", encoding="utf-8") as f:

    writer = csv.writer(f)

    writer.writerows(data)

Code Breakdown:

- import csv: Imports the library for CSV manipulation

- newline="": Prevents extra blank lines between rows on Windows

- csv.writer(f): Creates a "writer object" that formats your data correctly

- writerows(data): Writes multiple rows from a list of lists at once

23.4 Exercises and Review

Exercises

Task 23a: Create a calculator that performs +, -, *, /, and **. Log every calculation to history.txt (e.g., 5 + 3 = 8).

Task 23b: Upgrade the calculator. When the program starts, it should read history.txt and display the most recent calculation.

Task 23c: Create settings.csv to store ComputerName and Color. Allow the user to update these settings and save them so the program "remembers" them next time.

Review Questions

23.1 Which mode is used to open a file for reading only?

A. "w"

B. "a" 

C. "r"

D. "x"

Question 23.2: Why should we use the f.close() command after finishing operations with a file?

A. To release memory and ensure data is saved safely

B. To make the program run faster

C. To delete the file's content

D. It is not necessary to close the file

Question 23.3: What is the primary difference between "w" and "a" modes when writing to a file?

A. "w" is used for text files, "a" is used for numeric files

B. "w" overwrites existing content, while "a" appends to the end of the file

C. "w" can only write one line, while "a" can write multiple lines

D. There is no difference

-----