Chào các bạn trong diễn đàn,
Mình thường xuyên phải làm việc với các file CSV nhỏ lẻ và cần tổng hợp chúng lại thành một file Excel duy nhất để tiện theo dõi và phân tích. Trước đây, mình thường copy-paste thủ công hoặc dùng các hàm trong Excel, nhưng với số lượng file lớn thì rất mất thời gian và dễ sai sót.
Gần đây, mình có tìm hiểu và áp dụng Python để tự động hóa việc này, và thấy hiệu quả rõ rệt. Mình muốn chia sẻ lại cách làm đơn giản này với mọi người, hy vọng sẽ giúp ích cho các bạn nào đang gặp tình huống tương tự.
Cách làm
Mình sử dụng thư viện pandas để đọc các file CSV và openpyxl (hoặc xlsxwriter) để ghi ra file Excel.
- Chuẩn bị: Đảm bảo bạn đã cài đặt Python và các thư viện cần thiết. Nếu chưa, bạn có thể cài bằng pip:
pip install pandas openpyxl - Viết code Python:
import pandas as pd
import glob
import os
# Thư mục chứa các file CSV
csv_folder = 'duong/dan/toi/thu/muc/csv'
# Tên file Excel đầu ra
output_excel_file = 'tong_hop_du_lieu.xlsx'
# Tìm tất cả các file CSV trong thư mục
all_files = glob.glob(os.path.join(csv_folder, "*.csv"))
# Đọc từng file CSV và ghép chúng lại
list_of_dfs = []
for f in all_files:
df = pd.read_csv(f)
list_of_dfs.append(df)
# Tạo một DataFrame tổng hợp
combined_df = pd.concat(list_of_dfs, ignore_index=True)
# Ghi DataFrame tổng hợp ra file Excel
combined_df.to_excel(output_excel_file, index=False)
print(f"Đã tổng hợp {len(all_files)} file CSV vào {output_excel_file}")
Giải thích code
glob.glob: Giúp tìm kiếm tất cả các file có đuôi.csvtrong thư mục chỉ định.pd.read_csv: Đọc nội dung của từng file CSV vào một DataFrame của pandas.pd.concat: Ghép các DataFrame lại với nhau.ignore_index=Trueđể tạo lại chỉ số mới cho DataFrame kết quả.combined_df.to_excel: Xuất DataFrame tổng hợp ra file Excel.index=Falseđể không ghi chỉ số của DataFrame ra file Excel.
Cách này giúp mình tiết kiệm rất nhiều thời gian, đặc biệt khi có hàng chục, thậm chí hàng trăm file CSV cần xử lý. Các bạn có thể tùy chỉnh thêm code để xử lý các trường hợp phức tạp hơn như định dạng ngày tháng, tên cột khác nhau giữa các file, v.v.
Hy vọng chia sẻ này hữu ích cho mọi người!