Hướng dẫn lập trình Python 2.7 cơ bản và thực hành

1. Chạy và gỡ lỗi chương trình Python

1.1 Tham số dòng lệnh

Khi thực thi từ terminal:

python script.py arg1 arg2 arg3
  • sys.argv là danh sách chứa tất cả tham số truyền vào.
  • len(sys.argv) trả về tổng số tham số (bao gồm tên file).

1.2 Gỡ lỗi tương tác với pdb

Chèn điểm ngắt tại vị trí cần kiểm tra:

import pdb
pdb.set_trace()  # Dừng tại đây, dòng tiếp theo chưa được thực thi

Các lệnh điều khiển phổ biến:

  • n: Thực hiện dòng kế tiếp.
  • c: Tiếp tục chạy đến pdb.set_trace() tiếp theo hoặc kết thúc.
  • var_name: Hiển thị giá trị biến.
  • q hoặc exit: Thoát khỏi trình gỡ lỗi.

Khởi động trực tiếp qua CLI:

python -m pdb script.py

1.3 Thiết lập biến môi trường

Biến PYTHONPATH định nghĩa các thư mục mà trình thông dịch tìm kiếm module khi dùng import. Kiểm tra bằng:

import sys
print(sys.path)

Nếu bị sai lệch, đặt lại bằng lệnh shell: unset PYTHONPATH.

2. Quy ước cú pháp và mã hóa

2.1 Định dạng cơ bản

  • Thụt lề: Không dùng dấu ngoặc, chỉ dựa vào thụt lề thống nhất — khuyến khích 4 khoảng trắng.
  • Tách dòng: Dùng ký tự \ để nối câu lệnh; không cần nếu nằm trong [], {}, ().
  • Chuỗi: Hỗ trợ đơn nháy ('), kép (") và ba nháy (''' hoặc """). Ba nháy cho phép chuỗi đa dòng, thường dùng làm docstring.
  • Ghi chú: Một dòng bắt đầu bằng #; nhiều dòng dùng khối ba nháy.

2.2 Xử lý Unicode và mã hóa

Python 2.7 mặc định sử dụng ASCII → phải khai báo mã hóa rõ ràng:

# -*- coding: utf-8 -*-
data = u"Xin chào thế giới"
print(data.encode('utf-8'))

Với chuỗi Unicode dạng escape như r'\u65e5\u672c', chuyển sang UTF-8 bằng:

s = r'\u65e5\u672c'
decoded = s.decode('unicode_escape')

3. Nhập – xuất dữ liệu

3.1 Nhập liệu

  • raw_input(): Đọc một dòng dưới dạng chuỗi (không đánh giá biểu thức).
  • input(): Đọc và đánh giá biểu thức Python — tiềm ẩn rủi ro bảo mật.
  • getpass.getpass(): Nhập mật khẩu ẩn.

3.2 Xuất liệu

Dùng print để hiển thị:

count = 42
print("Giá trị:", count)
print("Hello " + "World!")

3.3 Làm việc với tệp tin

Sử dụng khối with đảm bảo đóng tệp đúng cách:

# Đọc từng dòng
lines = []
with open("input.txt", "r") as f:
    for line in f:
        lines.append(line.strip())

# Ghi dữ liệu dạng bảng
with open("output.txt", "w") as f:
    for a, b in zip(lines[0].split(), lines[1].split()):
        f.write(f"{a}\t{b}\n")

Các chế độ mở tệp phổ biến:

Chế độMô tảHành vi khi tệp không tồn tạiHành vi ghi
rChỉ đọcLỗi-
wGhi mớiTạo mớiGhi đè
aGhi nốiTạo mớiNối cuối
r+Đọc & ghiLỗiGhi đè từ đầu

4. Thư viện chuẩn thiết yếu

4.1 Xử lý hệ thống tập tin (os)

import os

# Kiểm tra tồn tại
if os.path.exists("config.ini"):
    print("Tệp cấu hình đã có")

# Duyệt cây thư mục
for root, dirs, files in os.walk("/home/user/docs"):
    for name in files:
        if name.endswith(".log"):
            print(os.path.join(root, name))

# Đường dẫn tuyệt đối
abs_path = os.path.abspath("data.csv")
parent_dir = os.path.dirname(abs_path)

4.2 Phân tích XML với xml.etree.ElementTree

import xml.etree.ElementTree as ET

# Tạo cây XML
root = ET.Element("catalog")
book = ET.SubElement(root, "book", id="101")
title = ET.SubElement(book, "title")
title.text = "Lập trình Python"

tree = ET.ElementTree(root)
tree.write("catalog.xml", encoding="utf-8", xml_declaration=True)

# Đọc và trích xuất
tree = ET.parse("catalog.xml")
for book in tree.findall("book"):
    print(book.get("id"), book.find("title").text)

5. Các kiểu dữ liệu cơ bản

5.1 Chuỗi (str)

text = "Python Programming"
print(text[0])          # 'P'
print(text[-1])         # 'g'
print(text[7:18])       # 'Programming'
print(text.replace("P", "p"))  # 'python Programming'

5.2 Danh sách (list) và bộ (tuple)

fruits = ["apple", "banana", "cherry"]
fruits.append("date")
fruits.sort()

coords = (10.5, 20.3)  # Không thể thay đổi sau khi tạo
x, y = coords  # Giải nén tự động

5.3 Từ điển (dict)

user = {"name": "Alice", "age": 30}
user["city"] = "Hanoi"
print(user.keys())      # ['name', 'age', 'city']
print(user.values())    # ['Alice', 30, 'Hanoi']

# Truy cập an toàn
email = user.get("email", "N/A")

6. Cấu trúc điều khiển

score = 85
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
else:
    grade = "C"

# Vòng lặp với else
for i in range(3):
    print(i)
else:
    print("Hoàn tất vòng lặp")  # Chỉ chạy nếu không có break

# Dừng sớm
for item in items:
    if item == "STOP":
        break
    process(item)

7. Hàm và xử lý ngoại lệ

7.1 Định nghĩa hàm

def calculate_tax(amount, rate=0.1):
    """Tính thuế theo tỷ lệ mặc định 10%"""
    return amount * rate

# Gọi với tham số tùy chọn
total = calculate_tax(1000, rate=0.15)

7.2 Bắt ngoại lệ

try:
    with open("missing.txt") as f:
        content = f.read()
except IOError as e:
    print(f"Lỗi I/O: {e}")
except Exception as e:
    print(f"Lỗi chung: {e}")
else:
    print("Đọc thành công!")
finally:
    print("Dọn dẹp hoàn tất.")

8. Lập trình hướng đối tượng

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.__balance = balance  # Thuộc tính riêng tư

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount

    def get_balance(self):
        return self.__balance

# Sử dụng
acc = BankAccount("Nguyen Van A", 500)
acc.deposit(200)
print(acc.get_balance())  # 700

9. Kết nối dịch vụ bên ngoài

9.1 PostgreSQL với psycopg2

import psycopg2

conn = psycopg2.connect(
    dbname="testdb",
    user="admin",
    password="secret",
    host="localhost"
)
cur = conn.cursor()
cur.execute("SELECT * FROM users WHERE active = %s", (True,))
results = cur.fetchall()
cur.close()
conn.close()

9.2 Redis với redis-py

import redis

pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)

r.set("user:1001", "John Doe", ex=3600)
name = r.get("user:1001")

10. Giao tiếp mạng và API

import requests

# GET với tham số
resp = requests.get("https://httpbin.org/get", params={"q": "python"})

# POST với JSON
payload = {"username": "test", "role": "admin"}
resp = requests.post("https://httpbin.org/post", json=payload)

# Xử lý phản hồi
if resp.status_code == 200:
    data = resp.json()
    print(data["json"]["username"])

11. Làm việc với JSON

import json

# Mã hóa
data = {"users": [{"id": 1, "name": "An"}], "total": 1}
json_str = json.dumps(data, indent=2, ensure_ascii=False)

# Giải mã
parsed = json.loads(json_str)
print(parsed["users"][0]["name"])  # "An"

# Đọc/ghi tệp
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

with open("data.json", "r", encoding="utf-8") as f:
    loaded = json.load(f)

Thẻ: python27 debugging xml-parsing Redis PostgreSQL

Đăng vào ngày 12 tháng 6 lúc 04:48