Tự Động Hóa Công Việc Văn Phòng
Python là công cụ mạnh mẽ để xử lý các tác vụ lặp đi lặp lại trong môi trường văn phòng. Dưới đây là một số ví dụ điển hình với mã nguồn được viết lại hoàn toàn — tối ưu hóa cấu trúc, cải thiện tính rõ ràng và tuân thủ các nguyên tắc lập trình hiện đại:
Trích xuất số điện thoại từ nhiều tệp văn bản
import re
from pathlib import Path
def extract_phone_numbers(file_path: Path) -> list:
content = file_path.read_text(encoding="utf-8")
# Hỗ trợ các định dạng phổ biến: 11 chữ số, bắt đầu bằng 13–19
pattern = r'1[3-9]\d{9}'
return re.findall(pattern, content)
def save_to_file(numbers: list, output_path: Path):
with output_path.open("w", encoding="utf-8") as f:
f.writelines(f"{num}\n" for num in numbers)
f.write(f"\nTổng cộng: {len(numbers)} số\n")
print(f"Đã lưu {len(numbers)} số điện thoại vào {output_path}")
# Sử dụng
input_file = Path(input("Nhập đường dẫn tệp đầu vào: "))
output_file = Path(input("Nhập đường dẫn tệp đầu ra: "))
phones = extract_phone_numbers(input_file)
save_to_file(phones, output_file)
Ghi dữ liệu văn bản vào bảng tính Excel
import pandas as pd
def text_to_excel(input_path: str, output_path: str, sheet_name: str = "Dữ liệu"):
with open(input_path, encoding="utf-8") as f:
lines = [line.strip() for line in f if line.strip()]
# Giả sử mỗi dòng có dạng "Tên: Nguyễn Văn A; Tuổi: 25"
records = []
for line in lines:
entry = {}
for pair in line.split(";"):
if ":" in pair:
key, value = map(str.strip, pair.split(":", 1))
entry[key] = value
records.append(entry)
df = pd.DataFrame(records)
df.to_excel(output_path, sheet_name=sheet_name, index=False)
print(f"Đã xuất {len(df)} bản ghi vào {output_path}")
# Sử dụng
text_to_excel(
input_path=input("Đường dẫn tệp văn bản: "),
output_path=input("Đường dẫn Excel xuất ra: "),
sheet_name=input("Tên sheet (mặc định: Dữ liệu): ") or "Dữ liệu"
)
Xóa các tệp trùng lặp dựa trên hàm băm
import hashlib
from pathlib import Path
def compute_hash(file_path: Path) -> str:
with file_path.open("rb") as f:
return hashlib.md5(f.read()).hexdigest()
def remove_duplicates_in_folder(folder: Path):
seen_hashes = set()
deleted_count = 0
for file_path in folder.iterdir():
if file_path.is_file():
file_hash = compute_hash(file_path)
if file_hash in seen_hashes:
file_path.unlink()
deleted_count += 1
else:
seen_hashes.add(file_hash)
print(f"Đã xóa {deleted_count} tệp trùng lặp.")
# Sử dụng
folder_path = Path(input("Nhập thư mục cần quét: "))
remove_duplicates_in_folder(folder_path)
Web Scraping Với Python
Python cung cấp nhiều thư viện linh hoạt cho việc thu thập dữ liệu từ web. Đối với trang tĩnh, requests và BeautifulSoup là lựa chọn hiệu quả. Với trang động hoặc yêu cầu tương tác (như cuộn, nhấn nút), Selenium hoặc Playwright phù hợp hơn. Lưu ý luôn tuân thủ robots.txt, thiết lập độ trễ giữa các yêu cầu và kiểm tra điều khoản sử dụng của trang đích.
Học Máy & Xử Lý Hình Ảnh
Với thư viện như scikit-learn, TensorFlow, hoặc PyTorch, Python hỗ trợ đầy đủ chuỗi quy trình học máy: tiền xử lý dữ liệu, huấn luyện mô hình, đánh giá và triển khai. Đối với xử lý ảnh, OpenCV và Pillow cho phép thực hiện nhận diện đối tượng, phát hiện cạnh, tăng cường ảnh, thêm watermark, chuyển đổi định dạng hàng loạt — tất cả đều có thể tự động hóa qua script.
Phát Triển Web
Các framework như Django và Flask giúp xây dựng ứng dụng web nhanh chóng và bảo mật. Django đặc biệt nổi bật nhờ kiến trúc "batteries-included": ORM tích hợp, hệ thống quản trị tự sinh, xác thực người dùng sẵn sàng — phù hợp cho các hệ thống phức tạp như CMS, nền tảng phân tích hoặc hệ thống nội bộ. Flask thì nhẹ và linh hoạt hơn, thích hợp cho microservice hoặc API RESTful.
Vẽ Hình Với Turtle
Thư viện turtle không chỉ dành cho người mới — nó còn là công cụ trực quan để minh họa thuật toán đệ quy, fractal hoặc mô phỏng hành vi tự nhiên. Ví dụ dưới đây vẽ cây nhị phân với hiệu ứng màu theo độ sâu:
import turtle as t
import random
def draw_branch(length: float, depth: int):
if length < 5 or depth < 0:
return
t.pensize(max(1, 4 - depth))
if depth > 3:
t.color("#333333")
elif depth > 1:
t.color("#2E8B57")
else:
t.color("#FF69B4")
t.forward(length)
angle = random.randint(20, 35)
t.left(angle)
draw_branch(length * 0.7, depth - 1)
t.right(angle * 2)
draw_branch(length * 0.7, depth - 1)
t.left(angle)
t.backward(length)
t.speed(0)
t.left(90)
t.penup()
t.goto(0, -200)
t.pendown()
draw_branch(100, 6)
t.hideturtle()
t.done()