Bài tập lập trình
Bài tập File Operations - Nâng cao

Bài tập File Operations - Nâng cao

  1. Viết hàm file_backup tạo backup file với timestamp.
from datetime import datetime
 
def file_backup(filename):
    # Tạo file backup với tên: filename.backup_YYYYMMDD_HHMMSS
    # Code của bạn ở đây
    pass
 
# Test
file_backup("important.txt")
# Tạo: important.txt.backup_20251204_143045
  1. Viết hàm chunk_file_reader đọc file lớn từng chunk (để tiết kiệm memory).
def chunk_file_reader(filename, chunk_size=1024):
    # Yield từng chunk
    pass
 
# Test
for chunk in chunk_file_reader("large_file.txt"):
    process(chunk)
  1. Viết hàm diff_files so sánh 2 file và trả về các dòng khác nhau.
def diff_files(file1, file2):
    # Code của bạn ở đây
    pass
 
# Test
differences = diff_files("version1.txt", "version2.txt")
for line_num, line1, line2 in differences:
    print(f"Line {line_num}: '{line1}' vs '{line2}'")
  1. Viết hàm file_statistics thống kê chi tiết file (lines, words, chars, most common word).
def file_statistics(filename):
    stats = {
        "lines": 0,
        "words": 0,
        "characters": 0,
        "unique_words": 0,
        "most_common_word": None
    }
    # Code của bạn ở đây
    return stats
 
# Test
stats = file_statistics("data.txt")
print(stats)
  1. Viết LogRotator class quản lý log files với rotation (giới hạn kích thước, tự động tạo file mới).
class LogRotator:
    def __init__(self, base_filename, max_size_mb=10):
        self.base_filename = base_filename
        self.max_size_bytes = max_size_mb * 1024 * 1024
        self.current_file_index = 0
 
    def write_log(self, message):
        # Ghi log, tự động rotate nếu file quá lớn
        pass
 
# Test
logger = LogRotator("app.log", max_size_mb=1)
for i in range(10000):
    logger.write_log(f"Log entry {i}")
  1. Viết hàm find_and_replace_multiple thay thế nhiều pattern cùng lúc trong file.
def find_and_replace_multiple(filename, replacements):
    # replacements: dict {"old1": "new1", "old2": "new2"}
    pass
 
# Test
replacements = {
    "Python 2": "Python 3",
    "old_api": "new_api",
    "deprecated": "current"
}
find_and_replace_multiple("code.txt", replacements)
  1. Viết hàm csv_to_dict đọc CSV file thành list of dictionaries (không dùng csv module).
def csv_to_dict(filename):
    # Dòng đầu là header
    # Trả về list of dicts
    pass
 
# Test
data = csv_to_dict("data.csv")
# [{"name": "Alice", "age": "25"}, {"name": "Bob", "age": "30"}]
  1. Viết hàm dict_to_csv ghi list of dictionaries ra CSV file.
def dict_to_csv(filename, data):
    # data: list of dicts
    # Dòng đầu là header (keys của dict đầu tiên)
    pass
 
# Test
data = [
    {"name": "Alice", "age": 25, "city": "Hanoi"},
    {"name": "Bob", "age": 30, "city": "HCMC"}
]
dict_to_csv("output.csv", data)
  1. Viết FileWatcher theo dõi thay đổi của file và callback khi có thay đổi.
import time
import os
 
class FileWatcher:
    def __init__(self, filename, callback):
        self.filename = filename
        self.callback = callback
        self.last_modified = os.path.getmtime(filename)
 
    def watch(self, interval=1):
        while True:
            current_modified = os.path.getmtime(self.filename)
            if current_modified != self.last_modified:
                self.callback(self.filename)
                self.last_modified = current_modified
            time.sleep(interval)
 
# Test
def on_file_changed(filename):
    print(f"{filename} has been modified!")
 
watcher = FileWatcher("monitored.txt", on_file_changed)
# watcher.watch()  # Chạy trong thread riêng
  1. Viết hàm extract_code_blocks trích xuất code blocks từ Markdown file.
def extract_code_blocks(filename, language=None):
    # Trích xuất tất cả code blocks ```language ... ```
    # Trả về list of tuples: (language, code)
    pass
 
# Test
blocks = extract_code_blocks("README.md", "python")
for lang, code in blocks:
    print(f"Language: {lang}")
    print(code)
  1. Viết hàm file_encryptionfile_decryption mã hóa/giải mã file đơn giản.
def file_encryption(input_file, output_file, key):
    # Mã hóa đơn giản (XOR với key)
    pass
 
def file_decryption(input_file, output_file, key):
    # Giải mã
    pass
 
# Test
file_encryption("secret.txt", "encrypted.bin", 42)
file_decryption("encrypted.bin", "decrypted.txt", 42)
  1. Viết hàm split_file chia file lớn thành nhiều file nhỏ.
def split_file(filename, chunk_size_mb=10):
    # Chia file thành các phần: filename.part1, filename.part2, ...
    pass
 
# Test
split_file("large_video.mp4", chunk_size_mb=100)
  1. Viết hàm merge_split_files ghép các file đã split lại.
def merge_split_files(base_filename, output_filename):
    # Ghép filename.part1, filename.part2, ... thành output_filename
    pass
 
# Test
merge_split_files("large_video.mp4", "merged_video.mp4")
  1. Viết ConfigManager class quản lý config file với validation.
class ConfigManager:
    def __init__(self, config_file):
        self.config_file = config_file
        self.config = {}
 
    def load(self):
        # Load config từ file
        pass
 
    def save(self):
        # Save config vào file
        pass
 
    def get(self, key, default=None):
        # Lấy giá trị config
        pass
 
    def set(self, key, value):
        # Set giá trị config
        pass
 
    def validate(self):
        # Validate config
        pass
 
# Test
config = ConfigManager("app.config")
config.load()
config.set("database_url", "localhost:5432")
config.save()
  1. Viết hàm tail_file hiển thị n dòng cuối của file (như lệnh tail trong Linux).
def tail_file(filename, n=10):
    # Trả về n dòng cuối
    pass
 
# Test
last_lines = tail_file("log.txt", 5)
for line in last_lines:
    print(line)
  1. Viết hàm word_frequency_analysis phân tích tần suất từ và xuất báo cáo.
def word_frequency_analysis(filename, output_file="report.txt"):
    # Phân tích và tạo báo cáo:
    # - Top 20 từ xuất hiện nhiều nhất
    # - Độ dài trung bình của từ
    # - Tổng số từ unique
    pass
 
# Test
word_frequency_analysis("book.txt", "analysis_report.txt")
  1. Viết TemplateEngine đơn giản thay thế {{variable}} trong template file.
class TemplateEngine:
    def render(self, template_file, output_file, context):
        # Đọc template, thay {{var}} bằng context["var"]
        # Ghi ra output_file
        pass
 
# Test
engine = TemplateEngine()
context = {"name": "Alice", "age": 25, "city": "Hanoi"}
engine.render("template.html", "output.html", context)
  1. Viết hàm binary_file_compare so sánh 2 file binary byte-by-byte.
def binary_file_compare(file1, file2):
    # Trả về True nếu giống hệt, False nếu khác
    # In ra vị trí byte đầu tiên khác nhau
    pass
 
# Test
result = binary_file_compare("image1.png", "image2.png")
  1. Viết FileCache class cache nội dung file với TTL (time-to-live).
import time
 
class FileCache:
    def __init__(self, ttl_seconds=60):
        self.cache = {}
        self.ttl = ttl_seconds
 
    def get(self, filename):
        # Lấy từ cache nếu còn hạn, không thì đọc file
        pass
 
    def invalidate(self, filename):
        # Xoá cache của file
        pass
 
    def clear(self):
        # Xoá toàn bộ cache
        pass
 
# Test
cache = FileCache(ttl_seconds=30)
content = cache.get("data.txt")  # Đọc từ file, cache lại
content = cache.get("data.txt")  # Lấy từ cache
  1. Viết hàm sync_directories đồng bộ nội dung giữa 2 thư mục.
def sync_directories(source_dir, dest_dir):
    # Copy files mới/thay đổi từ source -> dest
    # Xoá files trong dest không có trong source
    # Báo cáo: files copied, files deleted, files unchanged
    pass
 
# Test
report = sync_directories("source_folder", "backup_folder")
print(f"Copied: {report['copied']}")
print(f"Deleted: {report['deleted']}")
  1. Viết FileVersionControl lưu trữ nhiều phiên bản của file.
class FileVersionControl:
    def __init__(self, tracked_file):
        self.tracked_file = tracked_file
        self.versions_dir = f"{tracked_file}.versions"
 
    def commit(self, message):
        # Lưu phiên bản hiện tại với message
        pass
 
    def list_versions(self):
        # List tất cả versions với timestamp và message
        pass
 
    def restore(self, version_id):
        # Khôi phục về version cũ
        pass
 
# Test
vcs = FileVersionControl("document.txt")
vcs.commit("Initial version")
# ... modify file ...
vcs.commit("Added new section")
vcs.list_versions()
vcs.restore(1)
  1. Viết hàm file_compression nén/giải nén file text đơn giản (không dùng thư viện).
def compress_file(input_file, output_file):
    # Run-length encoding hoặc simple compression
    pass
 
def decompress_file(input_file, output_file):
    # Giải nén
    pass
 
# Test
compress_file("large.txt", "compressed.dat")
decompress_file("compressed.dat", "decompressed.txt")
  1. Viết hàm extract_links trích xuất tất cả links từ HTML file.
def extract_links(html_file):
    # Tìm tất cả <a href="..."> và trả về list URLs
    # Không dùng thư viện parsing
    pass
 
# Test
links = extract_links("webpage.html")
for link in links:
    print(link)
  1. Viết FileIndexer tạo index để tìm kiếm nhanh trong nhiều files.
class FileIndexer:
    def __init__(self):
        self.index = {}  # {word: [(file, line_num), ...]}
 
    def index_file(self, filename):
        # Index tất cả từ trong file
        pass
 
    def index_directory(self, directory):
        # Index tất cả files trong thư mục
        pass
 
    def search(self, word):
        # Tìm kiếm và trả về [(file, line_num), ...]
        pass
 
    def save_index(self, index_file):
        # Lưu index vào file
        pass
 
    def load_index(self, index_file):
        # Load index từ file
        pass
 
# Test
indexer = FileIndexer()
indexer.index_directory("documents/")
results = indexer.search("Python")
for filename, line_num in results:
    print(f"{filename}:{line_num}")
  1. Viết SmartFileReader tự động detect encoding và đọc file.
class SmartFileReader:
    @staticmethod
    def detect_encoding(filename):
        # Thử các encoding phổ biến: utf-8, utf-16, latin-1
        pass
 
    @staticmethod
    def read(filename):
        # Tự động detect encoding và đọc
        pass
 
# Test
content = SmartFileReader.read("unknown_encoding.txt")
print(content)

Lập trình Python - Bumbii Academy