Bài viết này sẽ hướng dẫn chi tiết cách làm việc với file Excel và cách chỉnh sửa dữ liệu cụ thể với Python
Trước tiên, chúng ta sẽ tìm hiểu cách làm việc với các tệp CSV bằng cách đọc, viết và cập nhật chúng. Sau đó, chúng ta sẽ xem cách đọc tệp, lọc tệp theo trang tính, tìm kiếm hàng/cột và cập nhật ô của tệp xlsx
Hãy bắt đầu với định dạng bảng tính đơn giản nhất. CSV
Phần 1 — Tệp CSVTệp CSV là tệp giá trị được phân tách bằng dấu phẩy, trong đó dữ liệu văn bản thuần túy được hiển thị ở định dạng bảng. Chúng có thể được sử dụng với bất kỳ chương trình bảng tính nào, chẳng hạn như Microsoft Office Excel, Google Spreadsheets hoặc LibreOffice Calc
Tuy nhiên, tệp CSV không giống như các tệp bảng tính khác vì chúng không cho phép bạn lưu ô, cột, hàng hoặc công thức. Hạn chế của họ là họ cũng chỉ cho phép một tờ trên mỗi tệp. Kế hoạch của tôi cho phần đầu tiên của bài viết này là chỉ cho bạn cách tạo tệp CSV bằng Python 3 và mô-đun thư viện tiêu chuẩn CSV
Hướng dẫn này sẽ kết thúc với hai kho lưu trữ GitHub và một ứng dụng web trực tiếp thực sự sử dụng mã của phần thứ hai của hướng dẫn này [chưa được cập nhật và sửa đổi cho một mục đích cụ thể]
Ghi vào tệp CSVĐầu tiên, mở một tệp Python mới và nhập mô-đun Python CSV
Nhập csvMô-đun CSV
Mô-đun CSV bao gồm tất cả các phương thức cần thiết được tích hợp sẵn. Bao gồm các
- csv. người đọc
- csv. nhà văn
- csv. DictReader
- csv. DictWriter
- và những người khác
Trong hướng dẫn này, chúng tôi sẽ tập trung vào các phương pháp của nhà văn, DictWriter và DictReader. Những điều này cho phép bạn chỉnh sửa, sửa đổi và thao tác dữ liệu được lưu trữ trong tệp CSV
Ở bước đầu tiên, chúng ta cần xác định tên của tệp và lưu nó dưới dạng một biến. Chúng ta cũng làm tương tự với thông tin header và data
BiếnBây giờ chúng ta cần tạo một hàm có tên là nhà văn sẽ nhận ba tham số. tiêu đề, dữ liệu và tên tệp
chức năng nhà vănBước tiếp theo là sửa đổi hàm ghi để nó tạo một tệp chứa dữ liệu từ các biến tiêu đề và dữ liệu. Điều này được thực hiện bằng cách viết hàng đầu tiên từ biến tiêu đề và sau đó viết bốn hàng từ biến dữ liệu [có bốn hàng vì có bốn bộ trong danh sách]
Tài liệu Python chính thức mô tả cách csv. phương pháp nhà văn hoạt động. Tôi thực sự khuyên bạn nên dành một phút để đọc nó
Và Voila. Bạn đã tạo tệp CSV đầu tiên có tên imdb_top_4. csv. Mở tệp này bằng ứng dụng bảng tính ưa thích của bạn và bạn sẽ thấy nội dung như thế này
Sử dụng LibreOffice Calc để xem kết quả
Kết quả có thể được viết như thế này nếu bạn chọn mở tệp trong một số ứng dụng khác
Sử dụng SublimeText để xem kết quả. Cập nhật tệp CSV
Để cập nhật tệp này, bạn nên tạo một hàm mới có tên là trình cập nhật sẽ chỉ nhận một tham số có tên là tên tệp
Hàm này trước tiên mở tệp được xác định trong biến tên tệp và sau đó lưu tất cả dữ liệu mà nó đọc từ tệp bên trong biến có tên readData. Bước thứ hai là mã hóa cứng giá trị mới và đặt nó thay vì giá trị cũ ở vị trí readData[0][‘Rating’]
Bước cuối cùng trong hàm là gọi hàm ghi bằng cách thêm một cập nhật tham số mới sẽ cho hàm biết bạn đang thực hiện cập nhật
csv. DictReader được giải thích thêm trong tài liệu Python chính thức tại đây
Để trình ghi hoạt động với một tham số mới, bạn cần thêm một tham số mới ở mọi nơi trình ghi được xác định. Quay lại nơi bạn gọi hàm ghi lần đầu tiên và thêm “viết” làm tham số mới
Ngay bên dưới chức năng ghi, hãy gọi trình cập nhật và chuyển tham số tên tệp vào đó
Bây giờ bạn cần sửa đổi chức năng ghi để có một tham số mới có tên tùy chọn
Từ giờ trở đi, chúng tôi hy vọng sẽ nhận được hai tùy chọn khác nhau cho chức năng người viết [viết và cập nhật]. Do đó, chúng ta nên thêm hai câu lệnh if để hỗ trợ chức năng mới này. Phần đầu tiên của chức năng dưới “nếu tùy chọn == “viết. ” đã được biết đến với bạn. Bạn chỉ cần thêm “tùy chọn elif == “cập nhật”. phần mã và phần khác giống như chúng được viết dưới đây
hoan hô. bạn đã hoàn thành
Bây giờ mã của bạn sẽ trông giống như thế này
Mật mã
Bạn cũng có thể tìm thấy mã ở đây
https. //github. com/GoranAviani/CSV-Viewer-and-Editor
Trong phần đầu tiên của bài viết này, chúng ta đã thấy cách làm việc với các tệp CSV. Chúng tôi đã tạo và cập nhật một tệp như vậy
Phần 2 — Tệp xlsxTrong nhiều ngày cuối tuần tôi đã làm việc trên dự án này. Tôi đã bắt đầu làm việc với nó vì có nhu cầu về loại giải pháp này trong công ty của tôi. Ý tưởng đầu tiên của tôi là xây dựng giải pháp này trực tiếp trong hệ thống của công ty tôi, nhưng sau đó tôi sẽ không có gì để viết, phải không?
Tôi xây dựng giải pháp này bằng thư viện Python 3 và openpyxl. Lý do tại sao tôi chọn openpyxl là vì nó đại diện cho một giải pháp hoàn chỉnh để tạo trang tính, tải, cập nhật, đổi tên và xóa chúng. Nó cũng cho phép chúng tôi đọc hoặc ghi vào các hàng và cột, hợp nhất hoặc hủy hợp nhất các ô hoặc tạo biểu đồ excel Python, v.v.
Thuật ngữ Openpyxl và thông tin cơ bản- Sổ làm việc là tên cho một tệp Excel trong Openpyxl
- Một workbook bao gồm các sheet [mặc định là 1 sheet]. Các trang tính được tham chiếu theo tên của chúng
- Một trang tính bao gồm các hàng [dòng ngang] bắt đầu từ số 1 và các cột [dòng dọc] bắt đầu từ chữ A
- Các hàng và cột dẫn đến một lưới và các ô biểu mẫu có thể chứa một số dữ liệu [giá trị số hoặc chuỗi] hoặc công thức
Openpyxl trong tài liệu độc đáo và tôi khuyên bạn nên xem tại đây
Bước đầu tiên là mở môi trường Python của bạn và cài đặt openpyxl trong thiết bị đầu cuối của bạn
pip install openpyxl
Tiếp theo, nhập openpyxl vào dự án của bạn và sau đó tải sổ làm việc vào biến Tệp
Như bạn có thể thấy, mã này in tất cả các trang tính theo tên của chúng. Sau đó, nó chọn trang tính có tên là “khách hàng 1” và lưu nó vào một biến Trang tính hiện tại. Ở dòng cuối cùng, mã in giá trị nằm ở vị trí B4 của trang tính "khách hàng 1"
Mã này hoạt động bình thường nhưng nó rất khó mã hóa. Để làm cho điều này năng động hơn, chúng tôi sẽ viết mã sẽ
- Đọc tập tin
- Nhận tất cả tên trang tính
- Lặp qua tất cả các trang tính
- Ở bước cuối cùng, mã sẽ in các giá trị nằm trong các trường B4 của mỗi trang tìm thấy trong sổ làm việc
Điều này tốt hơn trước, nhưng nó vẫn là một giải pháp được mã hóa cứng và nó vẫn giả định giá trị bạn sẽ tìm kiếm nằm trong ô B4, điều này thật ngớ ngẩn. ]
Tôi cho rằng dự án của bạn sẽ cần tìm kiếm bên trong tất cả các trang tính trong tệp Excel để tìm một giá trị cụ thể. Để làm điều này, chúng tôi sẽ thêm một vòng lặp for nữa trong phạm vi “ABCDEF” và sau đó chỉ cần in tên ô và giá trị của chúng
Chúng tôi đã làm điều này bằng cách giới thiệu “cho hàng trong phạm vi. " vòng. Phạm vi của vòng lặp for được xác định từ ô ở hàng 1 đến số hoặc hàng tối đa của trang tính. Tìm kiếm vòng lặp thứ hai trong các tên cột được xác định trước “ABCDEF”. Trong vòng lặp thứ hai, chúng tôi sẽ hiển thị vị trí đầy đủ của ô [tên cột và số hàng] và một giá trị
Tuy nhiên, trong bài viết này, nhiệm vụ của tôi là tìm một cột cụ thể có tên là “điện thoại” rồi duyệt qua tất cả các hàng của cột đó. Để làm điều đó, chúng ta cần sửa đổi mã như dưới đây
Mã đã sửa đổi này đi qua tất cả các ô của mỗi trang tính và giống như trước khi phạm vi hàng là động và phạm vi cột là cụ thể. Đoạn mã lặp qua các ô và tìm ô chứa văn bản “điện thoại”. Khi mã tìm thấy ô cụ thể, nó sẽ thông báo cho người dùng biết văn bản nằm trong ô nào. Mã thực hiện việc này cho mọi ô bên trong tất cả các trang tính trong tệp Excel
Bước tiếp theo là đi qua tất cả các hàng của cột cụ thể đó và in các giá trị
Điều này được thực hiện bằng cách thêm một hàm có tên get_column_letter để tìm một chữ cái của một cột. Sau khi tìm thấy chữ cái của cột, chúng tôi lặp qua tất cả các hàng của cột cụ thể đó. Điều này được thực hiện với hàm get_all_values_by_cell_letter sẽ in tất cả giá trị của các ô đó
kết thúcáo ngực. Có rất nhiều điều bạn có thể làm sau này. Kế hoạch của tôi là xây dựng một ứng dụng trực tuyến sẽ chuẩn hóa tất cả các số điện thoại của Thụy Điển được lấy từ một hộp văn bản và cung cấp cho người dùng khả năng chỉ cần sao chép kết quả từ cùng một hộp văn bản. Bước thứ hai trong kế hoạch của tôi là mở rộng chức năng của ứng dụng web để hỗ trợ tải tệp Excel lên, xử lý số điện thoại bên trong các tệp đó [chuẩn hóa chúng thành định dạng tiếng Thụy Điển] và cung cấp lại các tệp đã xử lý cho người dùng
Tôi đã thực hiện cả hai nhiệm vụ đó và bạn có thể thấy chúng trực tiếp trên trang Công cụ của Incodaq của tôi. trang com
https. //công cụ. incodaq. com/
Ngoài ra, mã từ phần thứ hai của bài viết này có sẵn trên GitHub
https. //github. com/GoranAviani/Manipulate-Excel-bảng tính
Cảm ơn bạn đã đọc. Xem thêm các bài viết như thế này trên hồ sơ Trung bình của tôi. https. //vừa phải. com/@goranaviani và những nội dung thú vị khác mà tôi xây dựng trên trang GitHub của mình. https. //github. com/GoranAviani