Xử lý tệp Python: Đọc, ghi, CSV, JSON và pathlib kèm ví dụ
Hầu hết mọi tập lệnh thực đều đọc hoặc ghi một tập tin. Tìm hiểu cách an toàn để mở tệp, chọn chế độ phù hợp, xử lý CSV và JSON, làm việc với các đường dẫn bằng pathlib và tránh lỗi xóa sạch dữ liệu của bạn.
- Luôn mở tệp có khối
withđể chúng tự động đóng. - Chế độ
"w"xóa một tập tin hiện có. Sử dụng"a"để thêm vào một hoặc"x"để từ chối ghi đè. - Lặp lại đối tượng tệp để đọc các tệp lớn mà không cần tải mọi thứ vào bộ nhớ.
- Vượt qua
encoding="utf-8"một cách rõ ràng và ưu tiênpathlibđể xây dựng đường dẫn.
Nhật ký, báo cáo, cấu hình, xuất: sớm hay muộn, mọi tập lệnh đều chạm vào hệ thống tệp. Việc xử lý tệp Python bắt đầu rất đơn giản nhưng có một số chi tiết quyết định xem mã của bạn có đáng tin cậy hay lặng lẽ phá hủy dữ liệu.
Hướng dẫn này bao gồm các tệp văn bản, CSV, JSON, dữ liệu nhị phân và đường dẫn, tập trung vào các thói quen an toàn. Chúng tôi đã chạy các ví dụ này trên Python 3.13 trong một thư mục tạm thời và kết quả hiển thị là từ lần chạy đó.
Mở tệp bằng open() và với
Hàm open() tích hợp trả về một đối tượng tệp. Sử dụng nó bên trong khối with:
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("first line\n")
file.write("second line\n")
print(file.closed)
# True
Khi khối kết thúc, Python sẽ đóng tệp, ngay cả khi xảy ra lỗi bên trong nó. Nếu không có with, bạn phải tự gọi close() và một ngoại lệ có thể bỏ qua dòng đó. Sử dụng một tập tin sau khi nó đã đóng sẽ gây ra lỗi:
file.read()
# ValueError: I/O operation on closed file.
Chế độ tập tin
Đối số thứ hai của open() cho biết bạn dự định làm gì:
| Chế độ | Ý nghĩa | Nếu tập tin tồn tại | Nếu nó không |
|---|---|---|---|
r |
Đọc (mặc định) | Mở nó ra | Lỗi |
w |
Viết | Xóa nó trước tiên | Tạo nó |
một |
Nối thêm | Thêm vào cuối | Tạo nó |
x |
Tạo độc quyền | Lỗi | Tạo nó |
r+ |
Đọc và viết | Mở nó ra | Lỗi |
Thêm b cho dữ liệu nhị phân, như trong "rb" hoặc "wb". Văn bản là mặc định và nó cũng có thể được viết rõ ràng dưới dạng t.
Viết và nối thêm
write() không thêm dấu ngắt dòng, vì vậy hãy thêm \n vào. Việc bổ sung sẽ giữ lại những gì đã có:
with open("notes.txt", "a", encoding="utf-8") as file:
file.write("third line\n")
So sánh điều đó với chế độ "w", thay thế ba dòng của chúng tôi bằng một dòng, không có cảnh báo nào cả:
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("replaced\n")
# notes.txt now contains only: replaced
Khi bạn không được ghi đè lên thứ gì đó, hãy sử dụng "x". Nó đã nâng cao FileExistsError trong thử nghiệm của chúng tôi vì notes.txt đã tồn tại.
Đọc một tập tin
Có một số cách để đọc và lựa chọn đúng tùy thuộc vào kích thước của tệp:
| Cách tiếp cận | Trả lại | Tốt nhất cho |
|---|---|---|
file.read() |
Một chuỗi với mọi thứ | Tệp nhỏ |
file.readline() |
Dòng tiếp theo | Đọc tiêu đề |
file.readlines() |
Danh sách các dòng | Các tệp nhỏ bạn cần làm danh sách |
cho dòng trong tập tin |
Mỗi dòng một lần | Mọi kích thước, đặc biệt là các tệp lớn |
with open("notes.txt", encoding="utf-8") as file:
print(repr(file.read()))
# 'first line\nsecond line\n'
with open("notes.txt", encoding="utf-8") as file:
for line in file:
print(line.strip())
# first line
# second line
# third line
Lưu ý các ký tự \n được giữ trong chuỗi thô. strip() loại bỏ chúng. Đối tượng tệp cũng ghi nhớ vị trí của nó, vì vậy việc đọc tiếp tục ở nơi nó đã dừng lại:
with open("notes.txt", encoding="utf-8") as file:
print(file.readline().strip())
print(file.readlines())
# first line
# ['second line\n', 'third line\n']
Lặp lại tệp là kỹ thuật chính cho các bản ghi lớn và xuất khẩu. Nó đọc từng dòng một, do đó, một tệp nhiều gigabyte không cần phải vừa với bộ nhớ.
Xử lý lỗi tập tin
Các tệp có thể bị thiếu, bị khóa hoặc không thể đọc được, vì vậy hãy lên kế hoạch cho việc đó:
try:
with open("missing.txt", encoding="utf-8") as file:
data = file.read()
except FileNotFoundError as error:
print(error)
# [Errno 2] No such file or directory: 'missing.txt'
| Ngoại lệ | Nguyên nhân điển hình |
|---|---|
TệpKhông Tìm thấyLỗi |
Đường dẫn không tồn tại |
Tệp tồn tạiLỗi |
Chế độ x trên một tệp hiện có |
QuyềnLỗi |
Không được phép hoặc bị khóa trên Windows |
IsADirectoryLỗi |
Đường dẫn là một thư mục |
UnicodeGiải MãLỗi |
Mã hóa sai đã được sử dụng |
Hãy thử mở tệp và phát hiện lỗi thay vì kiểm tra trước bằng exists(), vì tệp có thể biến mất giữa quá trình kiểm tra và mở. Hướng dẫn của chúng tôi về Xử lý ngoại lệ Python đề cập đến phương pháp này.
Tệp CSV
Không tự phân chia dòng CSV bằng dấu phẩy vì các giá trị được trích dẫn có thể chứa dấu phẩy. Mô-đun csv tiêu chuẩn xử lý các quy tắc đó. DictWriter và DictReader là những lựa chọn dễ đọc nhất:
import csv
with open("orders.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=["id", "customer", "total"])
writer.writeheader()
writer.writerow({"id": 1, "customer": "Asha", "total": 1200})
writer.writerow({"id": 2, "customer": "Ben", "total": 300})
with open("orders.csv", newline="", encoding="utf-8") as file:
rows = list(csv.DictReader(file))
print(rows[0])
print(sum(int(r["total"]) for r in rows))
# {'id': '1', 'customer': 'Asha', 'total': '1200'}
# 1500
Hai chi tiết quan trọng. Chuyển newline="" khi mở tệp CSV, như tài liệu khuyến nghị, để ngăn các hàng trống trên Windows. Và mọi giá trị đều trả về dưới dạng chuỗi, số chẵn, đó là lý do tại sao chúng ta cần int() trong tổng. Đối với công việc xử lý dữ liệu nặng, thư viện như pandas có thể phù hợp hơn.
tệp JSON
JSON là định dạng thông thường cho dữ liệu cấu hình và API. Nó ánh xạ gọn gàng vào từ điển Python và liệt kê:
import json
config = {"debug": True, "retries": 3, "hosts": ["a", "b"]}
with open("config.json", "w", encoding="utf-8") as file:
json.dump(config, file, indent=2)
with open("config.json", encoding="utf-8") as file:
print(json.load(file)["retries"])
# 3
Hãy nhớ cách đặt tên: dump và load hoạt động với các tệp, trong khi dumps và loads hoạt động với các chuỗi. Các loại như ngày tháng không thể được lưu trữ trực tiếp, vì vậy trước tiên bạn cần chuyển đổi chúng thành chuỗi.
Làm việc với các đường dẫn bằng pathlib
Việc dán các đường dẫn lại với nhau bằng các chuỗi ngắt trên các hệ điều hành. Mô-đun pathlib tiêu chuẩn xử lý các dấu phân cách cho bạn và cung cấp các phím tắt tiện dụng:
from pathlib import Path
path = Path("data") / "reports" / "summary.txt"
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("all good\n", encoding="utf-8")
print(path.read_text(encoding="utf-8").strip()) # all good
print(path.suffix, path.stem, path.exists()) # .txt summary True
print(sorted(p.name for p in Path(".").glob("*.csv")))
# ['orders.csv']
| Nhiệm vụ | đường dẫn |
|---|---|
| Tham gia đường dẫn | Đường dẫn("a") / "b.txt" |
| Tạo thư mục | path.mkdir(parents=True, tồn_ok=True) |
| Đọc hoặc viết toàn bộ văn bản | read_text(), write_text() |
| Tìm tập tin | glob("*.csv"), rglob("*.py") |
| Xóa một tập tin | path.unlink() |
| Lấy thư mục của tập lệnh hiện tại | Path(__file__).parent |
Điều cuối cùng đó giải quyết được cơn đau đầu thông thường. Các đường dẫn tương đối giải quyết từ nơi bạn chạy tập lệnh chứ không phải từ nơi tập lệnh tồn tại, do đó việc xây dựng các đường dẫn từ Path(__file__).parent sẽ tránh được nhiều điều bất ngờ “không tìm thấy tệp”.
Tệp nhị phân
Hình ảnh, tệp PDF và tệp ZIP không phải là văn bản. Mở chúng bằng b và bạn đọc và viết bytes mà không cần mã hóa:
with open("pixel.bin", "wb") as file:
file.write(bytes([255, 0, 128]))
with open("pixel.bin", "rb") as file:
print(file.read())
# b'\xff\x00\x80'
Viết an toàn hơn
Nếu một chương trình gặp sự cố khi đang ghi một tệp quan trọng, bạn có thể nhận được kết quả bị lỗi. Một cách khắc phục phổ biến là ghi vào một tệp tạm thời trước, sau đó hoán đổi nó vào vị trí:
temp = Path("settings.tmp")
temp.write_text("new", encoding="utf-8")
temp.replace("settings.txt")
print(Path("settings.txt").read_text(), temp.exists())
# new False
replace() ghi đè đích. Trên cùng một hệ thống tệp, việc đổi tên nói chung là nguyên tử, vì vậy người đọc sẽ thấy tệp cũ hoặc tệp mới thay vì hỗn hợp được viết một nửa.
Mẹo: Không bao giờ xây dựng đường dẫn tệp trực tiếp từ thông tin đầu vào của người dùng mà không kiểm tra chúng. Giá trị như ../../secrets.txt có thể tiếp cận các tệp bên ngoài thư mục dự định của bạn. Điều này được biết đến như một lỗ hổng truyền tải đường dẫn.
Một ví dụ thực tế: tóm tắt nhật ký
Kịch bản ngắn này kết hợp nhiều ý tưởng lại với nhau. Nó đọc nhật ký từng dòng một, do đó kích thước của nó không thành vấn đề, đếm từng cấp độ bằng cách sử dụng Counter và ghi tóm tắt vào một tệp mới:
from collections import Counter
counts = Counter()
with open("app.log", encoding="utf-8") as file:
for line in file:
counts[line.split()[0]] += 1
with open("summary.txt", "w", encoding="utf-8") as out:
for level, total in counts.most_common():
out.write(f"{level}: {total}\n")
# summary.txt
# ERROR: 2
# INFO: 2
# WARN: 1
Nhật ký mẫu của chúng tôi có năm dòng. Một dòng trống sẽ ngắt line.split()[0], vì vậy các tập lệnh thực sự nên bỏ qua các dòng trống trước tiên.
Những lỗi thường gặp
- Sử dụng
"w"khi ý bạn là"a". Dữ liệu hiện có của bạn sẽ biến mất ngay lập tức khi mở, ngay cả khi bạn không bao giờ viết bất cứ điều gì. - Bỏ qua mã hóa. Giá trị mặc định thay đổi tùy theo hệ thống, do đó, tập lệnh hoạt động trên Linux có thể bị lỗi trên Windows với văn bản có dấu hoặc biểu tượng cảm xúc.
- Gọi
read()trên các tệp lớn. Điều này có thể làm cạn kiệt bộ nhớ, vì vậy hãy lặp lại các dòng. - Quên
int()trên các giá trị CSV."10" + "20"cho"1020". - Bỏ qua
newline=""cho CSV. Bạn có thể nhận được các hàng trống không mong muốn trên Windows. - Không kiểm tra mã tệp. Sử dụng bản cố định
tmp_pathcủa pytest để kiểm tra không bao giờ chạm vào tệp thực. Xem hướng dẫn pytest của chúng tôi.
Lời kết
Một số thói quen bao gồm hầu hết mọi thứ ở đây: sử dụng with, đặt mã hóa, suy nghĩ kỹ về "w" và để csv, json và pathlib thực hiện những phần khó. Để thực hành, hãy viết một tập lệnh nhỏ đọc CSV, tính tổng một cột và lưu bản tóm tắt JSON vào một thư mục mới.
Câu hỏi thường gặp
Làm cách nào để đọc từng dòng tệp trong Python?
Mở nó trong một khối with và lặp qua đối tượng tệp. Cái này đọc từng dòng một, vì vậy nó hoạt động tốt ngay cả đối với những tệp rất lớn.
Sự khác biệt giữa w và chế độ là gì?
Chế độ w xóa mọi nội dung hiện có ngay khi tệp mở ra. Chế độ a giữ nội dung hiện có và thêm dữ liệu mới vào cuối tệp.
Tại sao tôi nên sử dụng with để mở một tập tin?
Câu lệnh with sẽ tự động đóng tệp khi khối kết thúc, ngay cả khi xảy ra lỗi. Điều này ngăn ngừa rò rỉ và giúp đảm bảo dữ liệu được ghi.
Làm cách nào để kiểm tra xem tệp có tồn tại trong Python không?
Sử dụng Path(“name.txt”).exists() từ pathlib. Nếu bạn dự định mở nó ngay sau đó, việc phát hiện FileNotFoundError thường đáng tin cậy hơn việc kiểm tra trước.
Tại sao CSV của tôi có dòng trống trên Windows?
Có thể bạn đã mở tệp mà không có dòng mới=””. Mô-đun csv tự quản lý các kết thúc dòng, vì vậy hãy chuyển đối số đó để tránh các hàng trống thừa.
Tiếp tục học hỏi
Cần trợ giúp về kiểm tra, WordPress hoặc SEO?
Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.
Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại
Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.
Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó
Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …
Đọc bài viết →DevOpsGiải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng
Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…
Đọc bài viết →Phát triển phần mềmGiải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429
Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …
Đọc bài viết →Tự động hóa kiểm thửChế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối
Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…
Đọc bài viết →Kiểm thử phần mềmGiải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%
Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…
Đọc bài viết →Cơ sở dữ liệu & SQLDELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại
DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ
Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…
Đọc bài viết →Phát triển phần mềmGiao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch
Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …
Đọc bài viết →Phát triển phần mềmGiải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng
Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…
Đọc bài viết →Phát triển phần mềmHàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng
Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …
Đọc bài viết →Trí tuệ nhân tạoĐại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy
Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …
Đọc bài viết →DevOpsGiám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết
Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…
Đọc bài viết →DevOpsDocker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách
Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …
Đọc bài viết →Tự động hóa kiểm thửTDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each
TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…
Đọc bài viết →Kiểm thử phần mềmKiểm tra chấp nhận của người dùng (UAT): Quy trình, danh sách kiểm tra và ví dụ thực tế
Giải thích về thử nghiệm chấp nhận của người dùng: ai chạy nó, nó khác với QA như thế nào, quy trình bảy bước, mẫu trường hợp thử nghiệm UAT, danh s…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về các giá trị NULL của SQL: IS NULL, COALESCE, NULLIF và những cái bẫy cần tránh
Các giá trị SQL NULL được giải thích bằng các truy vấn chúng tôi đã chạy: logic ba giá trị, IS NULL, COALESCE, NULLIF, cách tổng hợp, kết hợp và sắp…
Đọc bài viết →Cơ sở dữ liệu & SQLCâu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp
TRƯỜNG HỢP SQL KHI được giải thích bằng các truy vấn mà chúng tôi đã chạy: các biểu mẫu đơn giản và được tìm kiếm, thứ tự điều kiện, các thủ thuật S…
Đọc bài viết →Phát triển phần mềmJWT là gì? Mã thông báo Web JSON được giải thích bằng một ví dụ hoạt động
JWT là gì? Mã thông báo Web JSON đã giải thích: ba phần, mã thông báo được xây dựng và giả mạo trong mã chúng tôi đã chạy, JWT so với phiên, lưu trữ…
Đọc bài viết →Phát triển phần mềmGiải thích về vòng lặp sự kiện JavaScript: Ngăn xếp cuộc gọi, Microtask và bộ hẹn giờ kèm ví dụ
Vòng lặp sự kiện JavaScript được giải thích bằng mã chúng tôi đã chạy: ngăn xếp cuộc gọi, hàng đợi tác vụ và vi nhiệm, tại sao setTimeout 0 không di…
Đọc bài viết →Phát triển phần mềmGiải thích về trình tạo và năng suất của Python: Tiết kiệm bộ nhớ bằng các ví dụ thực tế
Trình tạo và lợi nhuận Python được giải thích bằng mã chúng tôi đã chạy: cách chúng tạm dừng và tiếp tục, đo mức tiết kiệm bộ nhớ, quy trình, chuỗi …
Đọc bài viết →Trí tuệ nhân tạoNhúng là gì? Giải thích sự tương đồng về vectơ và Cosine một cách đơn giản
nhúng là gì? Hướng dẫn bằng ngôn ngữ đơn giản về vectơ, độ tương tự cosine và tìm kiếm ngữ nghĩa, với một ví dụ nhỏ mà chúng tôi đã chạy, các cách s…
Đọc bài viết →DevOpsTriển khai Blue-Green và Canary: Sự khác biệt, sự đánh đổi và cách lựa chọn
Giải thích về triển khai Blue-green và Canary: cách hoạt động của từng loại, chi phí, rủi ro và khôi phục, nhóm người dùng ổn định mà chúng tôi đã t…
Đọc bài viết →Tự động hóa kiểm thửKiểm tra không ổn định: Nguyên nhân gây ra chúng và cách khắc phục chúng vĩnh viễn
Các thử nghiệm không ổn định được giải thích bằng các bản demo mà chúng tôi đã chạy: nguyên nhân chính, cách xác nhận và chẩn đoán nguyên nhân, cách…
Đọc bài viết →Kiểm thử phần mềmKiểm tra tải và kiểm tra căng thẳng: Sự khác biệt, số liệu và ví dụ về k6
Giải thích về thử nghiệm tải và thử nghiệm căng thẳng: mỗi thử nghiệm chứng minh điều gì, thử nghiệm tăng đột biến và ngâm, số liệu quan trọng, lý d…
Đọc bài viết →Kiểm thử phần mềmTrường hợp thử nghiệm và kịch bản thử nghiệm: Sự khác biệt chính, ví dụ và thời điểm sử dụng từng trường hợp
Giải thích trường hợp kiểm thử và kịch bản kiểm thử: định nghĩa rõ ràng, bảng cạnh nhau, một tính năng đặt lại mật khẩu được lấy từ các tình huống n…
Đọc bài viết →Cơ sở dữ liệu & SQLTối ưu hóa truy vấn SQL: Đọc kế hoạch thực thi và sửa các truy vấn chậm, có tính thời gian
Đã thử nghiệm tối ưu hóa truy vấn SQL trên một triệu hàng: đọc kế hoạch thực hiện, thêm chỉ mục phù hợp, sửa các bộ lọc không thể mở rộng, sử dụng c…
Đọc bài viết →Cơ sở dữ liệu & SQLSQL UNION và UNION ALL: Sự khác biệt, ví dụ và hiệu suất đã được kiểm tra
SQL UNION và UNION ALL được giải thích bằng các truy vấn chúng tôi đã chạy: trùng lặp, cả hai quy tắc đều tuân theo, lỗi dữ liệu thực, hiệu suất đượ…
Đọc bài viết →Phát triển phần mềmHướng dẫn API tìm nạp JavaScript: GET, POST, Xử lý lỗi và hết thời gian chờ
Hướng dẫn API tìm nạp JavaScript đã được thử nghiệm trên máy chủ cục bộ: GET và POST, tại sao 404 không gửi, trình trợ giúp có thể sử dụng lại, chuỗ…
Đọc bài viết →Phát triển phần mềmXử lý tệp Python: Đọc, ghi, CSV, JSON và pathlib kèm ví dụ
Việc xử lý tệp Python được giải thích bằng mã chúng tôi đã chạy: chế độ mở, với, đọc tệp lớn, CSV, JSON, pathlib, tệp nhị phân, ghi an toàn, xử lý l…
Đọc bài viết →Phát triển phần mềmGit merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào
Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.
Đọc bài viết →Phát triển phần mềmList comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh
List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)
Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.
Đọc bài viết →