Hôm nay chúng ta sẽ đi vào bài 7. Ở bài này, chúng ta sẽ cùng nhau đi tìm hiểu cách xử lý tập tin trong Python nhé. Nào, bắt đầu vào công việc thôi.
1. Script là gì?
Một ngôn ngữ kịch bản hay ngôn ngữ lập trình kịch bản (tiếng Anh: scripting language hay script language) là một ngôn ngữ lập trình hỗ trợ viết kịch bản (script). Các chương trình được viết cho ngôn ngữ kịch bản có thể được thực thi thông qua lời gọi từ các tác vụ thay vì chạy thủ công bởi người dùng.
Kịch bản có thể được viết và thực hiện "on-the-fly", tức là không cần biên dịch (compile) và liên kết (linked). Khác với các ngôn ngữ thông thường, chương trình viết ra cần biên dịch thành mã máy trước khi đến tay người dùng, chương trình viết bằng ngôn ngữ kịch bản thường được chạy trực tiếp từ mã nguồn hoặc bytecode, do đó người sử dụng hoàn toàn xem và đổi nó mã nguồn của chương trình.
2. Cách tạo script trong Python
Về bản chất, một script Python cũng không khác gì với một chương trình Python bình thường. Để chuyển một chương trình Python bình thường thành script ta làm như sau: Giả sử ta có chương trình fib() để tính dãy số fibonalci từ 0 đến số chúng ta nhập vào:
Để chuyển chương trình trên thành 1 script, ta sẽ chèn thêm đường dẫn đến biến môi trường vào:
Tiếp theo ta cần chmod lại file để nó có thể thực thi như script:
Và cuối cùng là test thử:
Ở chương trình trên mình dùng "from sys import argv", nó cho phép bạn nhập tham số truyền vào từ dòng lệnh lúc gọi chương trình, tất cả các tham số truyền vào được gán vào cho argv. Tiếp theo để lấy lần lượt các tham số ra, ta dùng:
Tại sao mình lấy mỗi tham số truyền vào "count" mà trong lệnh trên mình lại thêm cả script ở đầu.? Câu trả lời là hàm argv nhận vào tham số đầu tiên là tên của chương trình, sau đó mới đến các tham số truyền vào khác nên mình để script ở đầu cho nó nhận vào tên chương trình.
3. Xử lý file
Bây h chúng ta sẽ tập trung vào vấn đề chính. Để xử lý file, chúng ta có 1 số hàm sau:
Mở file:
File_name là tên của file, access_mode là chế độ truy cập: 'r' khi tập sẽ chỉ được đọc, 'w' chỉ được ghi (tập tin cùng tên đang có sẽ bị xóa), và 'a' mở tập tin để thêm vào cuối; mọi dữ liệu ghi vào tập tin sẽ được tự động thêm vào cuối. 'r+' mở tập tin để đọc và ghi. Thông số mode là không bắt buộc; 'r' sẽ được giả định nếu nó bị bỏ qua.
Trong Windows và Macintosh, 'b' thêm vào mode mở tập tin ở chế độ nhị phân, cho nên cũng có các chế độ khác như 'rb', 'wb', và 'r+b'. Windows phân biệt rõ các tập tin văn bản và nhị phân; ký tự hết dòng (end-of-line) trong các tập tin văn bản được tự động thay đổi một chút khi dữ liệu được đọc hay ghi. Việc thay đổi sau bức bình phong (behind-the-scene) như vậy không ảnh hưởng các tập tin văn bản ASCII, nhưng nó sẽ phá dữ liệu nhị phân như trong các tập tin JPEG hay hàm EXE . Cần cẩn thận dùng chế độ nhị phân khi đọc và ghi các tập tin như vậy.
Đối số tùy chọn đệm xác định kích thước bộ đệm mong muốn của tập tin: 0 có nghĩa là không có bộ đệm, 1 là có bộ đệm, bất kỳ giá trị nào khác là sử dụng một bộ đệm (ước tính) mà kích thước (theo byte). Một đệm tiêu cực có nghĩa là sử dụng hệ thống mặc định, mà thường là dòng đệm cho các thiết bị tty và đầy đủ đệm cho các tập tin khác. Nếu bỏ qua, mặc định hệ thống được sử dụng.
Đọc dữ liệu từ file:
byte_count cho phép chúng ta đọc số byte 1 lần
. Nếu đọc theo dòng readline() sẽ đọc cho đến khi gặp kí tự "\n". Phần này mình đã nêu ở khóa Python cơ bản bài 6 rồi. Các bạn có thể quay lại đọc lại.
Viết dữ liệu vào file:
Đóng file:
Đổi tên file:
Xóa file:
File name có thể là path nhé.
Để hiểu rõ hơn, xem ví dụ mình làm bên dưới nhé:
Với loạt ví dụ trên, chắc bạn có thể hiểu được 1 số hàm xử lý file. Sau đây là một bài tập nho nhỏ dành cho các bạn.
1. Script là gì?
Một ngôn ngữ kịch bản hay ngôn ngữ lập trình kịch bản (tiếng Anh: scripting language hay script language) là một ngôn ngữ lập trình hỗ trợ viết kịch bản (script). Các chương trình được viết cho ngôn ngữ kịch bản có thể được thực thi thông qua lời gọi từ các tác vụ thay vì chạy thủ công bởi người dùng.
Kịch bản có thể được viết và thực hiện "on-the-fly", tức là không cần biên dịch (compile) và liên kết (linked). Khác với các ngôn ngữ thông thường, chương trình viết ra cần biên dịch thành mã máy trước khi đến tay người dùng, chương trình viết bằng ngôn ngữ kịch bản thường được chạy trực tiếp từ mã nguồn hoặc bytecode, do đó người sử dụng hoàn toàn xem và đổi nó mã nguồn của chương trình.
2. Cách tạo script trong Python
Về bản chất, một script Python cũng không khác gì với một chương trình Python bình thường. Để chuyển một chương trình Python bình thường thành script ta làm như sau: Giả sử ta có chương trình fib() để tính dãy số fibonalci từ 0 đến số chúng ta nhập vào:
Code:
from sys import argv script, count = argv def fib(x): a = 1 b = 1 while b<x: print b, b,a = a, b+a fib(int(count))
Code:
#!/usr/bin/python from sys import argv script, count = argv def fib(x): a = 1 b = 1 while b<x: print b, b,a = a, b+a fib(int(count))
Code:
kma@ubuntu:~/LearningPython$ chmod +x ./script-demo.py
Code:
kma@ubuntu:~/LearningPython$ ./script-demo.py 10 1 1 2 3 5 8
Code:
script, count = argv
3. Xử lý file
Bây h chúng ta sẽ tập trung vào vấn đề chính. Để xử lý file, chúng ta có 1 số hàm sau:
Mở file:
Code:
open(file_name,access_mode,buffering)
Trong Windows và Macintosh, 'b' thêm vào mode mở tập tin ở chế độ nhị phân, cho nên cũng có các chế độ khác như 'rb', 'wb', và 'r+b'. Windows phân biệt rõ các tập tin văn bản và nhị phân; ký tự hết dòng (end-of-line) trong các tập tin văn bản được tự động thay đổi một chút khi dữ liệu được đọc hay ghi. Việc thay đổi sau bức bình phong (behind-the-scene) như vậy không ảnh hưởng các tập tin văn bản ASCII, nhưng nó sẽ phá dữ liệu nhị phân như trong các tập tin JPEG hay hàm EXE . Cần cẩn thận dùng chế độ nhị phân khi đọc và ghi các tập tin như vậy.
Đối số tùy chọn đệm xác định kích thước bộ đệm mong muốn của tập tin: 0 có nghĩa là không có bộ đệm, 1 là có bộ đệm, bất kỳ giá trị nào khác là sử dụng một bộ đệm (ước tính) mà kích thước (theo byte). Một đệm tiêu cực có nghĩa là sử dụng hệ thống mặc định, mà thường là dòng đệm cho các thiết bị tty và đầy đủ đệm cho các tập tin khác. Nếu bỏ qua, mặc định hệ thống được sử dụng.
Đọc dữ liệu từ file:
Code:
read(byte_count) readline()
Viết dữ liệu vào file:
Code:
write(data)
Code:
close()
Code:
os.rename(old_name,new_name)
Code:
os.remove(file_name)
Để hiểu rõ hơn, xem ví dụ mình làm bên dưới nhé:
Code:
Python 2.7.3 (default, Feb 27 2014, 19:58:35) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> f = open("test","w+") >>> f.write("Hello, Welcome to Python Tutorial") >>> f.write("\nksec.info\n") >>> a = f.readline() >>> print a >>> f.close() >>> f = open("test","r+") >>> a = f.readline() >>> print a Hello, Welcome to Python Tutorial >>> os.rename("test","python-demo") >>> f = open("python-demo","r") >>> print f.readline() Hello, Welcome to Python Tutorial >>> os.remove("./python-demo") >>> f = open("python-demo","r") Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: 'python-demo'
- Viết một chương trình giúp in ra những dòng có chứa từ usb trong file log tại địa chỉ:
"/var/log/dmesg". Bật mí cho bạn hãy sử dụng regular expression. Python có 1 module về cái này đó. Nó khá là mạnh.
No comments:
Post a Comment