📁 Bài Tập về Thao Tác File trong Python
Chào mừng bạn đến với tập hợp các bài tập về thao tác file trong Python! Các bài tập này sẽ giúp bạn thực hành các kỹ năng đọc, ghi và xử lý file - một kỹ năng cực kỳ quan trọng trong lập trình thực tế.
🔰 Bài Tập Mức Cơ Bản
Bài 1: Đọc và In Nội Dung File
Yêu cầu: Tạo một file văn bản có tên sample.txt
với nội dung bất kỳ. Viết chương trình Python đọc và in ra nội dung của file đó.
Xem gợi ý
# Tạo file mẫu (chỉ cần chạy 1 lần)
with open('sample.txt', 'w', encoding='utf-8') as f:
f.write("Đây là file mẫu.\nPython rất thú vị!\nTôi đang học thao tác với file.")
# Đọc và in nội dung file
try:
with open('sample.txt', 'r', encoding='utf-8') as file:
content = file.read()
print("Nội dung của file:")
print(content)
except FileNotFoundError:
print("Không tìm thấy file 'sample.txt'")
Bài 2: Đếm Số Dòng, Từ và Ký Tự
Yêu cầu: Viết chương trình đếm số dòng, số từ và số ký tự trong một file văn bản.
Xem gợi ý
def count_lines_words_chars(filename):
"""Đếm số dòng, từ và ký tự trong file."""
try:
with open(filename, 'r', encoding='utf-8') as file:
# Đọc nội dung file
content = file.read()
# Đếm số ký tự
char_count = len(content)
# Đếm số dòng
lines = content.split('\n')
line_count = len(lines)
# Đếm số từ
word_count = 0
for line in lines:
words = line.split()
word_count += len(words)
return line_count, word_count, char_count
except FileNotFoundError:
print(f"Không tìm thấy file '{filename}'")
return 0, 0, 0
# Sử dụng hàm
filename = 'sample.txt'
lines, words, chars = count_lines_words_chars(filename)
print(f"File '{filename}' có:")
print(f"- {lines} dòng")
print(f"- {words} từ")
print(f"- {chars} ký tự")
Bài 3: Ghi Danh Sách vào File
Yêu cầu: Viết chương trình nhận danh sách tên từ người dùng và ghi chúng vào một file, mỗi tên trên một dòng.
Xem gợi ý
def write_names_to_file(filename):
"""Ghi danh sách tên vào file."""
names = []
print("Nhập danh sách tên (nhập 'done' để kết thúc):")
while True:
name = input("> ")
if name.lower() == 'done':
break
names.append(name)
try:
with open(filename, 'w', encoding='utf-8') as file:
for name in names:
file.write(name + '\n')
print(f"Đã ghi {len(names)} tên vào file '{filename}'")
except Exception as e:
print(f"Có lỗi xảy ra: {e}")
# Sử dụng hàm
filename = 'names.txt'
write_names_to_file(filename)
🔄 Bài Tập Mức Trung Bình
Bài 4: Tìm Kiếm Từ trong File
Yêu cầu: Viết chương trình tìm kiếm một từ khóa trong file văn bản và in ra các dòng chứa từ khóa đó cùng với số dòng tương ứng.
Xem gợi ý
def search_keyword(filename, keyword):
"""Tìm kiếm từ khóa trong file và hiển thị các dòng chứa từ khóa."""
try:
with open(filename, 'r', encoding='utf-8') as file:
lines = file.readlines()
found = False
for i, line in enumerate(lines, 1): # Đánh số dòng từ 1
if keyword.lower() in line.lower():
print(f"Dòng {i}: {line.strip()}")
found = True
if not found:
print(f"Không tìm thấy từ khóa '{keyword}' trong file")
except FileNotFoundError:
print(f"Không tìm thấy file '{filename}'")
# Sử dụng hàm
filename = 'sample.txt'
keyword = input("Nhập từ khóa cần tìm: ")
search_keyword(filename, keyword)
Bài 5: Sao Chép File
Yêu cầu: Viết chương trình sao chép nội dung từ một file nguồn sang một file đích.
Xem gợi ý
def copy_file(source_file, destination_file):
"""Sao chép nội dung từ file nguồn sang file đích."""
try:
# Đọc nội dung từ file nguồn
with open(source_file, 'r', encoding='utf-8') as source:
content = source.read()
# Ghi nội dung vào file đích
with open(destination_file, 'w', encoding='utf-8') as destination:
destination.write(content)
print(f"Đã sao chép nội dung từ '{source_file}' sang '{destination_file}'")
except FileNotFoundError:
print(f"Không tìm thấy file nguồn '{source_file}'")
except Exception as e:
print(f"Có lỗi xảy ra: {e}")
# Sử dụng hàm
source = 'sample.txt'
destination = 'sample_copy.txt'
copy_file(source, destination)
Bài 6: Thống Kê Tần Suất Từ
Yêu cầu: Viết chương trình đọc một file văn bản và thống kê tần suất xuất hiện của mỗi từ trong file.
Xem gợi ý
def word_frequency(filename):
"""Thống kê tần suất xuất hiện của mỗi từ trong file."""
try:
with open(filename, 'r', encoding='utf-8') as file:
# Đọc nội dung và chuyển về chữ thường
content = file.read().lower()
# Loại bỏ các ký tự đặc biệt và thay thế bằng khoảng trắng
for char in '.,;:!?"()[]{}':
content = content.replace(char, ' ')
# Tách thành danh sách các từ
words = content.split()
# Đếm tần suất
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
# Sắp xếp theo tần suất giảm dần
sorted_words = sorted(word_count.items(), key=lambda x: x[1], reverse=True)
return sorted_words
except FileNotFoundError:
print(f"Không tìm thấy file '{filename}'")
return []
# Sử dụng hàm
filename = 'sample.txt'
frequency = word_frequency(filename)
print(f"Tần suất xuất hiện của các từ trong file '{filename}':")
for word, count in frequency:
print(f"'{word}': {count} lần")
🚀 Bài Tập Mức Nâng Cao
Bài 7: Ghi Log File
Yêu cầu: Viết một chương trình ghi log hoạt động. Chương trình sẽ ghi thời gian hiện tại và một thông điệp tùy chọn vào file log mỗi khi được gọi.
Xem gợi ý
import datetime
def log_activity(message, log_file="activity.log"):
"""Ghi log hoạt động với thời gian hiện tại."""
try:
# Lấy thời gian hiện tại
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# Định dạng log entry
log_entry = f"[{current_time}] {message}\n"
# Ghi vào file log (chế độ append)
with open(log_file, 'a', encoding='utf-8') as file:
file.write(log_entry)
print(f"Đã ghi log: {log_entry.strip()}")
except Exception as e:
print(f"Không thể ghi log: {e}")
# Sử dụng hàm
log_activity("Chương trình bắt đầu chạy")
# Giả lập một số hoạt động
log_activity("Người dùng đăng nhập: user123")
log_activity("Truy cập vào trang chủ")
log_activity("Tải file report.pdf")
log_activity("Người dùng đăng xuất")
print("\nNội dung file log:")
try:
with open("activity.log", 'r', encoding='utf-8') as file:
print(file.read())
except FileNotFoundError:
print("Không tìm thấy file log")