Thứ Năm, 12 tháng 12, 2013

Làm một vòng quanh các python's library :) (tiếp)

Làm một vòng quanh các python's library :)  (tiếp)

 

1. Định dạng đầu ra (output formatting)

Module Repr(): hiển thị vắn tắt các containers( kiểu kiểu như là các đối tượng chứa) lớn hoặc bị trùng lặp nhau:
>>> import repr
>>>repr.repr('conbocon') ===> "'conbocon'"===> đầu ra dạng string thêm "  "
>>>repr.repr(set('con bò')) ===> set(['b', 'c','n','o'])===> hiển thị các kí tự có mặt trong container (theo thứ tự a,b..)

 Module 'pprint' - pretty print 

có tác dụng in các dữ liệu lớn một cách khoa học hơn giúp cho người đọc dễ nhận biết mà interpreter có thể đọc và operation được. Khi kết quả dài hơn một dòng thì "prety print" sẽ xuống dòng ,thụt đầu dòng và hiển thị dấu thụt đầu dòng ===> người dùng dễ dàng đọc dữ liệu hơn. ex:
>>> import pprint
>>> t = [[[['black', 'cyan'], 'white', ['green', 'red']], [['magenta',
...     'yellow'], 'blue']]]
...
>>> pprint.pprint(t, width=30)
[[[['black', 'cyan'],
   'white',
   ['green', 'red']],
  [['magenta', 'yellow'],
   'blue']]]
 
 
second argument đơn giản để bạn căn độ rộng dữ liệu ban muốn thể hiện, nghĩa là số kí tự không quá lượng width ấy. ví dụ bạn cho "width = 10" thì mỗi dòng sẽ hiển thị một số lượng kí tự là 10( cả while space...).

Module "textwrap "
Sửa file text. Nó căn cho file text của bạn chia dòng ra, hiển thị theo độ rộng mà bạn thích . width = 40 , sẽ có tối đa 40 kí tự hiện trên một dòng :)

>>>import textwrap
>>>textwrap.textwap('hehe haha hihi', width=3)
===>hehe -có một  whitespace nhé :)
          haha 
          hihi


2. Templating - quá trình tạo ra mẫu

module "string" cung cấp một "template" class với cú pháp đơn giản và bạn có thể dễ dàng edit chúng. Điều này cho phép bạn có thể tùy biến các application mà không cần phải thay đổi nhiều

>>>from string import Template 
>>>x = Template('${Obj}nh has $$10 for $obj')
>>>x.substitute(Obj = 'tha', object = 'Hung')
===>'thanh has $10 for Hung'

$ : là placehoder (một loại kí tự đánh dấu)==>tên biến hợp lệ của python,'{}' giúp Obj khong bị ngăn cach với kí tự trước(sau) nó.==>'$$' $ đầu tiên tạo một single escapes tránh $ thứ 2 bị lẫn với placehoders ==> '$' cuối đánh dấu kí tự hợp lệ tiếp theo của python

Khi $  không được cung cấp đầy đủ từ một dict hay người dùng nhập thiếu arguament thì sẽ xuất hiện lỗi. safe_substitute() khắc phục điều đó, nó sẽ giữ nguyên spacehoders nếu data nhập vaò bị thiếu

>>>from string import Template 
>>>x = Template('${Obj}nh has $$10 for $obj')
>>>x.substitute(Obj = 'tha')
===>'thanh has $10 for $obj'
 
 Template subclass có khả năng xác định một delimiter ( một phần tử giới hạn) tùy biến. Dùng dấu % như một spacehoder :

>>> import time, os.path
>>> photofiles = ['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg']
>>> class BatchRename(Template):
...     delimiter = '%'
>>> fmt = raw_input('Enter rename style (%d-date %n-seqnum %f-format):  ')
Enter rename style (%d-date %n-seqnum %f-format):  Ashley_%n%f

>>> t = BatchRename(fmt)
>>> date = time.strftime('%d%b%y')
>>> for i, filename in enumerate(photofiles):
...     base, ext = os.path.splitext(filename)
...     newname = t.substitute(d=date, n=i, f=ext)
...     print '{0} --> {1}'.format(filename, newname)

img_1074.jpg --> Ashley_0.jpg
img_1076.jpg --> Ashley_1.jpg
img_1077.jpg --> Ashley_2.jpg

Logging

Module "logging' cung cấp một hệ thống loging rất linh hoạt và đầy đủ các tính năng. Logging system được hỗ trợ trực tiếp từ python hoặc có thể được load từ một configuration file mà user có thể thay đổi được cho logging tùy biến mà không cần sửa đổi application
Xét ví dụ đơn giản,log messagers được chuyeent tới một file hoặc tới sys.stderr và được ghi tại đó
 
import logging
logging.debug('Debugging information')
logging.info('Informational message')
logging.warning('Warning:config file %s not found', 'server.conf')
logging.error('Error occurred')
logging.critical('Critical error -- shutting down')

Đầu ra của đoạc code trên:

WARNING:root:Warning:config file server.conf not found
ERROR:root:Error occurred
CRITICAL:root:Critical error -- shutting down
  
Hiểu được đến đây thôi :)







4 nhận xét:

  1. repr.repr
    repr thứ nhất là module
    repr thứ 2 là function

    Module Repr(): là sai.

    Trả lờiXóa
  2. repr.repr(set('con bò')) ===> set(['b', 'c','n','o'])

    ví dụ fake, đừng cố nhét tiếng Việt vào nếu không hiểu. con bo là con bo , không phải con bò

    Trả lờiXóa
  3. 'pprint' - pretty print
    cái này dùng khá thường xuyên khi còn là amater để debug.

    Trả lờiXóa
  4. logging là module sẽ dùng ở mọi chương trình, nên bắt đầu dùng logging thay lệnh "print" ngay từ bây giờ. Tìm thêm tài liệu về logging mà đọc.

    Trả lờiXóa