🌱 Học Python cho Embedded Developer - Làm việc với File và Dữ liệu

🌱 Học Python cho Embedded Developer - Làm việc với File và Dữ liệu

    Khi làm việc với các hệ thống nhúng (embedded systems), việc xử lý dữ liệu như lưu log, đọc cấu hình hoặc phân tích kết quả là một kỹ năng không thể thiếu. Trong bài viết này của series hướng dẫn Python dành cho embedded software developer, chúng ta sẽ tìm hiểu cách đọc/ghi file, xử lý dữ liệu đơn giản và sử dụng các module hữu ích như ossys. Cuối bài, bạn sẽ thực hành với một script thực tế: lưu dữ liệu giả lập từ thiết bị nhúng vào file log.

Tại sao Làm việc với File và Dữ liệu Quan trọng trong Embedded?

    Trong lĩnh vực nhúng, có rất nhiều tác vụ cần làm việc với file:

  • Lưu trữ log hoạt động của thiết bị (ví dụ: nhiệt độ, trạng thái cảm biến).
  • Đọc file cấu hình để có các điều chỉnh cần thiết cho chương trình.
  • Xử lý dữ liệu thô từ phần cứng để lưu trữ, phân tích hoặc gửi đi nơi khác.

    Python cung cấp các công cụ đơn giản nhưng mạnh mẽ để thực hiện những tác vụ này. Hãy cùng khám phá từng bước!


1. Đọc và Ghi File trong Python

➤ Mở file

    Trước khi thao tác với file, cần sử dụng hàm open() để mở file. Hàm này có hai tham số chính:

  • Đường dẫn đến file (tên file nếu file nằm trong cùng thư mục làm việc).
  • Chế độ mở file (ví dụ: 'r' để đọc, 'w' để ghi, 'a' để thêm vào cuối file).

  1. # Open a file for reading
  2. file_to_read = open('filename.txt', 'r')
  3. # Open a file for writing (overwrites existing content)
  4. file_to_write = open('filename.txt', 'w')
  5. # Open a file for appending (adds to the end)
  6. file_to_append = open('filename.txt', 'a')

➤ Đọc nội dung file

    Sử dụng các phương thức sau của đối tượng file:

  • read(): Đọc toàn bộ nội dung file và trả về một chuỗi.
  • readline(): Đọc một dòng từ file và trả về chuỗi (bao gồm cả ký tự newline \n ở cuối dòng nếu có).
  • readlines(): Đọc tất cả các dòng trong file và trả về một danh sách các chuỗi, mỗi chuỗi là một dòng.

  1. file = open('filename.txt', 'r')
  2. # Read the entire content
  3. content = file.read()
  4. print(content)
  5. # Read one line at a time
  6. first_line = file.readline()
  7. print(first_line)
  8. second_line = file.readline()
  9. print(second_line)
  10. # Read all lines into a list
  11. all_lines = file.readlines()
  12. for line in all_lines:
  13. print(line.strip()) # Remove the newline character at the end of each line
  14. file.close()

➤ Ghi nội dung vào file

  • Sử dụng phương thức write() để ghi một chuỗi vào file.
  • Để xuống dòng, bạn cần thêm ký tự newline \n vào cuối chuỗi.
  • Sử dụng phương thức writelines() để ghi một danh sách các chuỗi vào file.

  1. file = open('new_filename.txt', 'w')
  2. # Write a string
  3. file.write('This is the content written to the file.\n')
  4. # Write multiple strings from a list
  5. lines_to_write = ['First line.\n', 'Second line.\n', 'Third line.\n']
  6. file.writelines(lines_to_write)
  7. file.close()

➤ Đóng file

    Sau khi hoàn thành việc đọc hoặc ghi, bạn cần đóng file bằng phương thức close() để giải phóng tài nguyên hệ thống và đảm bảo dữ liệu được ghi xuống đĩa.

➤ Sử dụng with open() (cách tốt nhất)

    Cấu trúc with open(...) as ...: giúp tự động đóng file ngay cả khi có lỗi xảy ra trong quá trình làm việc với file. Đây là cách được khuyến nghị để làm việc với file.

  1. with open('yet_another_file.txt', 'r') as file:
  2. content = file.read()
  3. print(content)
  4. with open('latest_file.txt', 'w') as file:
  5. file.write('This content is written using with open.\n')

➤ Các chế độ mở file phổ biến:

  • 'r': Đọc (mặc định). File phải tồn tại.
  • 'w': Ghi. Nếu file tồn tại, nội dung cũ sẽ bị xóa. Nếu file không tồn tại, một file mới sẽ được tạo.
  • 'a': Thêm vào cuối file. Nếu file không tồn tại, một file mới sẽ được tạo.
  • 'r+': Đọc và ghi. File phải tồn tại. Con trỏ ban đầu ở đầu file.
  • 'w+': Ghi và đọc. Nội dung cũ bị xóa hoặc file mới được tạo. Con trỏ ban đầu ở đầu file.
  • 'a+': Thêm vào cuối và đọc. File được tạo nếu không tồn tại. Con trỏ ban đầu ở cuối file để ghi, nhưng bạn có thể di chuyển con trỏ để đọc.
  • 'x': Tạo độc quyền. Mở để ghi độc quyền, báo lỗi nếu file đã tồn tại.
  • 't': Chế độ text (mặc định).
  • 'b': Chế độ binary (cho các file không phải text như hình ảnh, âm thanh). Thường kết hợp với các chế độ trên (ví dụ: 'rb', 'wb').

2. Làm việc với File CSV

    File CSV (Comma-Separated Values) có thể được dùng trong hệ thống nhúng để:

  • Lưu trữ cấu hình: Dễ chỉnh sửa các thông số hoạt động.
  • Ghi nhật ký/dữ liệu cảm biến đơn giản: Lưu trữ tạm thời hoặc để phân tích.
  • Bảng tra cứu/dữ liệu kiểm thử: Cung cấp dữ liệu đầu vào.
  • Trao đổi dữ liệu đơn giản: Với các hệ thống khác.

    Python có module csv tích hợp sẵn:

  1. import csv
  2. # Write data to CSV
  3. with open('sensor_data.csv', 'w', newline='') as file:
  4. writer = csv.writer(file)
  5. writer.writerow(['Time', 'Temperature'])
  6. writer.writerow(['14:00', '25°C'])
  7. writer.writerow(['14:05', '26°C'])
  8. # Read data from CSV
  9. with open('sensor_data.csv', 'r') as file:
  10. reader = csv.reader(file)
  11. for row in reader:
  12. print(row) # Print each row as a list

    Kết quả khi đọc:

['Time', 'Temperature'] ['14:00', '25°C'] ['14:05', '26°C']

3. Xử lý Dữ liệu Đơn giản (Parsing và Lưu trữ Log)

    Giả sử bạn nhận dữ liệu thô từ cảm biến dưới dạng chuỗi như "Temp:25,Humidity:60". Hãy phân tích (parse) nó:

  1. # Simulated data from sensor
  2. data = "Temp:25,Humidity:60"
  3. # Split string into dictionary
  4. values = dict(item.split(':') for item in data.split(','))
  5. print(values) # {'Temp': '25', 'Humidity': '60'}
  6. # Save to log file
  7. with open('sensor_log.txt', 'a') as file:
  8. file.write(f"Temperature: {values['Temp']}°C, Humidity: {values['Humidity']}%\n")

    Kỹ thuật này rất hữu ích để xử lý dữ liệu từ phần cứng nhúng.


4. Giới thiệu Module ossys

Module os

    Module os cung cấp các hàm để tương tác với hệ điều hành – cực kỳ hữu ích trong embedded:

  • Kiểm tra file tồn tại: os.path.exists('log.txt').
  • Lấy đường dẫn thư mục hiện tại: os.getcwd().
  • Xóa file: os.remove('log.txt').

    Ví dụ:

  1. import os
  2. if os.path.exists('log.txt'):
  3. print("Log file already exists!")
  4. else:
  5. print("Create new log file.")

Module sys

    Module sys giúp quản lý chương trình Python:

  • Thoát chương trình: sys.exit().
  • Lấy thông tin phiên bản Python: sys.version.

    Ví dụ:

  1. import sys
  2. print(f"Python version: {sys.version}")
  3. if len(sys.argv) > 1:
  4. print(f"Command line arguments: {sys.argv[1]}")

    Trong embedded, bạn có thể dùng sys.argv để truyền tham số từ script điều khiển phần cứng.


5. Ứng dụng Thực tế: Script Lưu Dữ liệu Giả lập vào File Log

    Ví dụ tạo một script giả lập dữ liệu từ thiết bị nhúng (như nhiệt độ) và lưu vào file log:

  1. import time
  2. import os
  3. # Sensor data simulation function
  4. def get_sensor_data():
  5. return f"Temperature: {25 + (time.time() % 5):.1f}°C" # Simulate value change
  6. # Create or open a log file
  7. log_file = 'device_log.txt'
  8. if not os.path.exists(log_file):
  9. with open(log_file, 'w') as file:
  10. file.write("Embedded Device Log - Start\n")
  11. # Record data every 2 seconds (5 times)
  12. for _ in range(5):
  13. data = get_sensor_data()
  14. timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
  15. log_entry = f"[{timestamp}] {data}\n"
  16. with open(log_file, 'a') as file:
  17. file.write(log_entry)
  18. print(f"Wrote: {log_entry.strip()}")
  19. time.sleep(2) # Wait 2 seconds

Kết quả

    File device_log.txt sẽ chứa nội dung tương tự:

Embedded Device Log - Start [2025-03-14 10:00:00] Temperature: 25.3°C [2025-03-14 10:00:02] Temperature: 25.5°C [2025-03-14 10:00:04] Temperature: 25.7°C ...

Giải thích:

  • Dùng time để thêm timestamp và giả lập dữ liệu thay đổi.
  • Kiểm tra file với os.path.exists() để tránh lỗi.
  • Ghi thêm ('a') thay vì ghi đè.

Kết luận

    Trong bài này, bạn đã học cách:

  • Đọc và ghi file text/CSV trong Python.
  • Xử lý dữ liệu thô với kỹ thuật parsing đơn giản.
  • Sử dụng ossys để quản lý file và chương trình.
  • Áp dụng vào thực tế với script lưu log dữ liệu giả lập.

    Đây là nền tảng quan trọng để bạn tiến xa hơn trong việc tích hợp Python với phần cứng nhúng. Ở phần tiếp theo, chúng ta sẽ khám phá các module mạnh mẽ hơn như serial để giao tiếp trực tiếp với thiết bị!

>>>>>> Follow ngay <<<<<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn
//