Thông tin file mới nhất được sửa đổi là bao giờ

Hệ thống của mình cập nhật thông tin vào một file khi có sự kiện xảy ra. Nếu hệ thống gặp trục trặc sẽ không cập nhật thông tin và sẽ gây lỗi hệ thống sau đó. Thỉnh thoảng sẽ bị lỗi như vậy mà không rõ nguyên nhân.
Mình đành viết một đoạn Script chạy 15 phút 1 lần kiểm tra xem thời gian cuối cùng nó được sửa và gửi email cho mình. Nếu vài lần liên tiếp mà file không được cập nhật thông tin thì khả năng có chuyện xảy ra và cần vào server để kiểm tra.

 import os
 from subprocess import Popen, PIPE
 import smtplib
 import sys
 from datetime import datetime, timedelta
 import os.path, time
 now = datetime.now()
 yesterday=datetime.strftime(datetime.now() - timedelta(1), '%Y%d%m')
 subject = "Last modified file Z:\TRITUE.R.S.sec" + '\n\r'
 msg = "Last modified: " + str(datetime.fromtimestamp(os.path.getmtime("Z:\TRITUE.R.S.sec")))
 msg = "ABC-"+ str(datetime.fromtimestamp(os.lstat('Z:\TRITUE.R.S.sec').st_mtime))
 sender = '[email protected]'
 message = 'From: Mail [email protected] ' + '\n' + 'To: '
 receivers = ['[email protected]','[email protected]']
 receivers = ['[email protected]']
 count = 0
 receipent_list = ''
 for each_receipent in receivers:
     if count < len(receivers) -1:
         receipent_list = receipent_list + each_receipent + ','
     else:
         receipent_list = receipent_list + each_receipent
     count = count + 1
 message = message + receipent_list + '\n'
 message = message + 'Subject: ' + subject + '\n\r'
 message = message + msg + '\n'
 try:
    smtpObj = smtplib.SMTP('mail.trituenhantao.org')
    smtpObj.sendmail(sender, receivers, message)         
    print("Successfully sent email")
 except SMTPException:
    print("Error: unable to send email")

Check if directory mounted with Python

Sever Window bên mình luôn cần phải mount một directory tại một server Linux và một directory tại một server Window khác. Nhưng Server Window thỉnh thoảng bị mất mount các thư mục này. Nguyên có thể do đường mạng trục trặc, server chứa thư mục cần mount gặp trục trặc hoặc do việc logout không đúng cách. Việc không mount được gây nên một số job copy file hoặc ghi file bị lỗi nên việc mount cần phải được theo dõi liên tục.

Mình đã viết một đoạn Script Python làm nhiệm vụ check các directory có còn được mount hay không? Nếu không có tức là đã bị mất mount thì mình sẽ gửi email cảnh báo để vào mount lại. Code mình viết bằng Python, server là Window nên mình dùng Task Schedule để thực thư file bath gọi đoạn lệnh Python.

 import os
 from subprocess import Popen, PIPE
 import smtplib
 import sys
 from datetime import datetime, timedelta
 now = datetime.now()
 yesterday=datetime.strftime(datetime.now() - timedelta(1), '%Y%d%m')
 subject = "Check folder remote mount of server" + '\n\r'
 msg = "1"
 if  os.path.exists("Y:")== False or os.path.exists("X:")== False:
     msg = "Forder Y or X not mounted. Please remote server to check."
 sender = '[email protected]'
 message = 'From: Mail1 [email protected] ' + '\n' + 'To: '
 receivers = ['[email protected]','[email protected]']
 receivers = ['[email protected]']
 count = 0
 receipent_list = ''
 for each_receipent in receivers:
     if count < len(receivers) -1:
         receipent_list = receipent_list + each_receipent + ','
     else:
         receipent_list = receipent_list + each_receipent
     count = count + 1
 message = message + receipent_list + '\n'
 message = message + 'Subject: ' + subject + '\n\r'
 message = message + msg + '\n'
 if msg != '1':
     try:
        smtpObj = smtplib.SMTP('mail.trituenhantao.org')
        smtpObj.sendmail(sender, receivers, message)         
        print("Successfully sent email")
     except SMTPException:
        print("Error: unable to send email")

Check file exists on server

Hàng ngày hệ thống backup ra file và sau đó được chuyển sang một ổ SAN backup lại thuộc một dải mạng khác. Job chuyển file này hoạt động tốt nhưng thỉnh thoảng bị lỗi do mạng có trục trặc. Việc check xem file có được gửi sang hay không rất quan trọng để đảm bảo an toàn hệ thống. Trước đây ở công ty cũ toàn check thủ công bằng cách FTP vào ổ SAN để kiểm tra, sang công ty mới mình quyết định viết job kiểm tra việc này.

Job này hàng ngày chạy có nhiệm vụ kiểm tra file sáng sớm nay có được copy thành công sang ổ SAN hay không. Code mình viết trên Python, server là Window nên mình dùng Task Schedule để thực thư file bath gọi đoạn lệnh Python. Dù có hay không nó sẽ gửi email thông báo tới cho mình, việc hàng ngày của mình giờ chỉ là check email và thỉnh thoảng vào kiểm tra xem job chạy có ổn định hay không.

Hiện tại đã có job xóa các file backup cũ cách đây 1 tuần, nhưng nếu có trường hợp đột xuất việc file backup có dung lượng bất thường hoặc ổ cứng đầy (vì 1 lý do nào đó) thì mình vẫn chưa có job cách bảo.

 import os
 from subprocess import Popen, PIPE
 import smtplib
 import sys
 from datetime import datetime, timedelta
 now = datetime.now()
 yesterday=datetime.strftime(datetime.now() - timedelta(1), '%Y%d%m')
 abc="G:\Export_COSREP\cosrep_exp_full"+str(yesterday)+".dmp"
 subject = "Bios server export " + '\n\r'
 msg = "1"
 if os.path.exists(abc) == False:
     msg = "File export is not OK. Not found file: " + abc
 else:
     msg = "File export is OK. Found file: " + abc
 sender = '[email protected]'
 message = 'From: Mail [email protected] ' + '\n' + 'To: '
 receivers = ['[email protected]','[email protected]']
 receivers = ['[email protected]']
 count = 0
 receipent_list = ''
 for each_receipent in receivers:
     if count < len(receivers) -1:
         receipent_list = receipent_list + each_receipent + ','
     else:
         receipent_list = receipent_list + each_receipent
     count = count + 1
 message = message + receipent_list + '\n'
 message = message + 'Subject: ' + subject + '\n\r'
 message = message + msg + '\n'
 try:
    smtpObj = smtplib.SMTP('mail.trituenhantao.org')
    smtpObj.sendmail(sender, receivers, message)         
    print("Successfully sent email")
 except SMTPException:
    print("Error: unable to send email")

Top 26 Free Python Tools for Developer

Python là một ngôn ngữ lập trình xuất hiện từ lâu với nhiều ứng dụng và được rất nhiều lập trình viên ưa thích. Nhưng gần đây nó trở nên nổi tiếng và phổ biến bởi sử phát triển mạnh mẽ của Machine Learning và Trí tuệ nhân tạo. Sau đây là top 26 Free Python Tools hàng đầu được sử dụng phổ biến trong lĩnh vực Data Science, Machine Learning, Trí tuệ nhân tạo, Thống kê số liệu, Tính toán hiệu năng cao…

1. Pandas: Used for data analysis

Từ lâu Python là ngôn ngữ tuyệt vời cho việc trộn và chuẩn bị dữ liệu nhưng không mạnh về việc phân tích và mô hình hóa dữ liệu. Pandas giúp lấp đầy khoảng trống này cho phép ta có thể thực hiện toàn bộ quy trình phân tích dữ liệu trong Python mà không phải sử dụng đến ngôn ngữ chuyên về phân tích dữ liệu như R.

2. SciPy: Algorithms to use with numpy

Thư viện SciPy chứa một tập hợp các thuật toán và các công cụ để xử lý dữ liệu như số như xử lý tín hiệu, tối ưu hóa, thống kê và nhiều tính năng khác.

3. HDF5: Used to store and manipulate data

Thư viện HDF5 kết hợp với Numpy có thể lưu trữ và xử lý một lượng lớn dữ liệu số. Giúp ta có thể xử lý hàng Terabyte dữ liệu cũng nhưng hàng ngàn bộ dữ liệu (dataset) trong một tập dữ liệu.

4. Jupyter: Research collaboration tool

Jupyter là môi trường phát triển tương tác trực quan trên web giúp ta có thể code, xử lý dữ liệu, xem dữ liệu như bảng, biểu đồ và đặc biệt có thể chia sẻ cho tất cả mọi người. Jupyter khá linh hoạt, có thể cấu hình và sắp xếp giao diện để hỗ trợ tốt hơn các công việc hoặc nghiên cứu trong ngành data science, scientific computing và machine learning.

5. HDFS: C/C++ wrapper for Hadoop

Đây là một thư viện giúp Python có thể tương tác với hệ thống tệp của Hadoop để xử lý BigData

6. SQLAlchemy: Python SQL Toolkit

SQLAlchemy là một thư viện cơ bản giúp Python có thể giao tiếp với cơ sở dữ liệu. Thư viện này chủ yếu được sử dụng như một công cụ lập bản đồ quan hệ để dịch các lớp của Python thành các bảng trên cơ sở dữ liệu quan hệ và tự động chuyển đổi các lệnh gọi hàm thành các câu lệnh SQL.

7. pyMySQL: MySQL connector

pyMySQL là thư viện giúp Python kết nối tới hệ quản trị cơ sở dữ liệu MySQL.

8. Theano: Deep learning with neural network

Theano làm tăng sức mạnh tính toán của Python, cho phép developer có thể định nghĩa, tối ưu hóa và đánh giá các biểu thức toán hoạc liên quan đến mảng đa chiều một cách hiệu quả. Nó có thể chạy hiệu quả cả trên GPU và CPU, hỗ trợ đắc lực cho các tính toán neural network phục vụ các thuật toán Deep Learning.

9. Lasagne: Build and train neural network in Theano

Lasagne là một thư viện khá gọn nhẹ để xây dựng và huấn luyện neural network dựa trên Theano.

10. Seaborn: Data visualization tool

Seaborn là một thư viện mới dựa trên Matplotlib giúp ta có thể visualization dữ liệu một cách trực quan. Khi làm về data science thì việc hiển thị dữ liệu là một việc quan trọng và thường xuyên giúp ta có thể hiểu được dữ liệu. Seaborn đơn giản, dễ học và dễ sử dụng hơn Matplotlib vì nó trực quan và ít tham số hơn.

11. Airflow: Data enginnering tool

Airflow là một nền tảng giúp ta có thể lập trình, lên lịch và theo dõi các tiến trình công việc. Airflow có giao diện phong phú giúp ta có thể dễ dàng hình dung các quy trình, bước chạy trên hệ thống, có thể theo dõi trạng thái các tiến trình và khắc phục sự cố khi cần.

12. Elasticsearch: Data search engine

Elasticsearch là một công cụ tìm kiếm và phân tích dữ liệu, nó có khả năng tìm kiếm theo thời gian thực và phân tán. Nó cho phép bạn khám phá dữ liệu với tốc độ và ở quy mô chưa từng có trước đây. Nó có thể tìm kiếm toàn văn bản, tìm kiếm có cấu trúc, phân tích và kết hợp cả 3. Elasticsearch là ứng dụng mạnh mẽ nhất trong top free python tools bởi tính ứng dụng rất lớn trong việc tìm kiếm và phân tích dữ liệu.

13. PyBrain: Algorithms for ML

PyBrain là một module Machine Learning của Python. Mục tiêu của nó là sự linh hoạt, dễ sử dụng những vẫn chứa đầy đủ sức mạnh của các thuật toán Machine Learning.

14. NumPy: Multidimensional arrays

NumPy là một thư viện tính toán cơ bản rất hữu ích dành cho việc phân tích dữ liệu, thống kê và data science.

15. Matplotlib: Data visualization tool

Matplotlib là một thư viện hàng đầu giúp ta có thể dễ dàng mô hình hóa dữ liệu. Nói đơn giản hơn nó giúp ta có thể nghiên cứu dữ liệu thông qua các biểu đồ, hình vẽ… một cách trực quan.

16. PyTables: Used for managing HDF5 datasets

PyTables là một package của Python để quản lý các bộ dữ liệu phân cấp và được thiết kế để làm việc với lượng dữ liệu lớn và cực lớn.

17. IPython: Powerful shell

IPython là một ứng dụng giúp sử dụng code python shell một cách mạnh mẽ

18. PyMongo: MongoDB driver

PyMongo là thư viện giúp Python kết nối tới hệ quản trị cơ sở dữ liệu MongoDB.

19. Redis: Redis access libraries

Package này giúp Python làm việc dễ dàng với Redis.

20. Scikit-lear: Used for machine leaning algorithms

Đây là một trong những thư viện về Machine Learning nổi tiếng nhất giúp Python nằm trong top các ngôn ngữ lập trình phổ biến về Machine Learning. Scikit-lear chứa hầu hết các thuật toán Machine Learning từ đơn giản đến phức tạp, từ cổ điển đến hiện tại, xứng đáng nằm trong top free python tools cho lập trình viên.

21. Keras: High-level neural network API

Scikit-lear chuyên về Machine Learning còn Keras thì lại chuyên về Deep Learning giúp Python được sử dụng hiệu quả để phát triển các ứng dụng trí tuệ nhân tạo.

22. Bokeh: Data visualization tool

Bokeh kém nổi tiếng hơn Matplotlib nhưng cũng là một ứng dụng tốt để có thể visualization dữ liệu.

23. Dask: Data enginnering tool

Dask là giúp Python có thể xử lý các tác vụ liên quan đến tính toán song song.

24. Luigi: Data enginnering tool

Luigi giúp developer xây dựng các tác vụ, job phức tạp khi cần xử lý các công việc hàng loạt.

25. SymPy: Symbolic math

SymPy giúp Python tính toán các biểu thức toán học, các công thức toán học phức tạp.

26. Pattern: Natural language processing

Pattern là một module nổi tiếng giúp xử lý ngôn ngữ tự nhiên hiệu quả.

Trên đây là 26 free python tools phổ biến và hữu ích cho lập trình viên. Nếu bạn thấy có những tools, thư viện nào hữu ích và phổ biến hơn nữa thì chia sẻ cho mọi người thêm nhé.

Có thể bạn quan tâm:

Nâng cấp và set mặc định Python 3 cho CentOS 7

Mặc định Python được đặt của CentOS 7 là Python 2.7. Để code ML và AI với keras và tensoflow thì cần dùng Python 3 do vậy ta cần cài đặt Python 3 và đặt mặc định lệnh Python là python 3.

Link chi tiết cách cài đặt: https://cloudvedas.com/solved-install-python-3-in-linux-and-set-it-as-default/

Python matplotlib.pyplot error tkinter not found

Trên CentOS, bình thường khi import thư viện import matplotlib.pyplot as plt thì bị báo lỗi No module named Tkinter.
Mình không thể cài đặt Tkinter nhưng tìm ra các import thư viện matplotlib như sau sẽ không bị lỗi:

import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt

Tạo file PDF tự động bằng BIRT report bằng command line

Công ty mình có 1 công việc là hàng tháng gửi báo cáo bằng PDF gửi cho từng cửa hàng.
Trước đây việc này người trước xuất thủ công ra 1 file tổng PDF bằng Eclipse sau đó dùng tool để chia file ra và gửi đi bằng tay.
Sau đó mình sử dụng BIRT birt-viewer để xuất cả ra file tổng.
Đợt này mình muốn sử dụng lệnh để xuất thành từng file một để tự động gửi đi, mình có nghiên cứu sử dụng Python để xuất file theo từng mã cửa hàng (link tại đây) nhưng đúng là sử dụng Python khá mềm dẻo nhưng để căn được từng dòng để trình bày cho đẹp hoặc xử lý nhiều page một file rất khó khăn(một số thứ không làm được). Mình đành quay về sử dụng mẫu BIRT report cũ và tìm các xuất file bằng command line. May mắn đã có công cụ BIRT Runtime để chạy.

Sau đây là các bước mình đã làm, mọi người tham khảo nhé:

B1: Tải file nén BIRT Runtime về (địa chỉ tại đây)
B2: Giải nén file vào thư mục thuộc ổ C (đổi tên thư mục cho gọn, không sau sẽ không chạy được vì thằng này biến truyền vào giới hạn số lượng ký tự khá ít)
B3: set biến home cho nó vào thư mục ở B2:
Set BIRT_HOME=C:\birt-runtime
B4: Copy file rptdesign mà mình đã tạo bằng Eclipse vào thư mục: C:\birt-runtime\ReportEngine
B5: Sử dụng command line đi đến vị trí: C:\birt-runtime\ReportEngine
Ta có thể sử dụng luôn câu lệnh sau để gen ra file HuyEVET.pdf đặt ở ổ C thông qua file template HuyEVET.rptdesign.

.\genReport.bat --format PDF --output C:\HuyEVET.pdf .\HuyEVET.rptdesign

Đối với Linux ta cũng có thể làm tương tự nhưng ta chạy file .\genReport.sh

Để xuất file PDF với biến truyền vào mình vẫn chưa làm được, sắp tới làm được mình sẽ cập nhật nhé.

P/S: Nếu file rptdesign có kết nối tới DB oracle thì ta cần thêm thư viện JDBC: ojdbc6-11.2.0.4.jar vào trong thư mục lib: C:\birt-run\ReportEngine\lib

Cài đặt Flask và Flask-API trên Window offline

Để cài đặt Flask và Flask-API offline trên Window ta cần dowload đầy đủ các thư viện và cài đặt lần lượt như sau:
(Cách cài đặt Package Office như bài hướng dẫn: Cách cài đặt các package của python trên Window offline)

1: Werkzeug
2: MarkupSafe
3: pytz
4: Babel
5: Jinja2
6: itsdangerous
7: Click
8: Flask
9: Flask-API

Để tải các thành phần trên ta vào địa chỉ: https://pypi.org/ để tìm và tải tại mục: Download files.

Cài đặt: pip27.exe install ThePackageFile-0.0.0.tgz

Cài đặt các package của python trên Window offline

Server trên công ty mình không được kết nối Internet nên mọi thứ đều phải cài đặt offline. Cài đặt Python thì đơn giản, google thì có đầy.
Nhưng khi cài đặt một số package mở rộng thì trên mạng thường hưỡng dẫn cài đặt trực tiếp command thông qua lệnh PIP: pip install “gói cần cài đặt”
Ví dụ trực quan như cài đặt qua PIP trên: https://pypi.org/project/Jinja2/#description
Thì gõ lệnh: pip install Jinja2
Hệ thống sẽ tự động tải và cài đặt toàn bộ các thư viện cần thiết trước khi cài Jinja2 và cài Jinja2.

Bước 1: Nếu không có kết nối Internet trên server thì ta buộc phải cài đặt thủ công nhưng cũng thông qua trình PIP. Để có PIP thì ta tải phần mềm PIP theo đường dẫn sau và copy lên server (có cả phiên bản pip cho Python3 tại: https://github.com/phamkhactuy/python_I_learn):
https://github.com/phamkhactuy/python_I_learn/blob/master/pip2.7.exe

Bước 2: Để cài đặt một gói nào đó, ta đi tải gói đó về. Ví dụ ta muốn cài thư viện Flask thì ta vào địa chỉ https://pypi.org/project/Flask/ hoặc google để tìm. Ta vào phần Download để tải Source về(định dạng file được nén dạng .tar.gz). Để đơn giản ta đặt file này cùng thư mục với file pip2.7,exe đã tải về (Ví dụ tải được file: Flask-1.0.2.tar).

Bước 3: Tại thư mục này ta giữ phím Shift nhấn chuột phải và chọn: Open command window here hoặc dùng lệnh Cmd di chuyển đến thư mục chứa file.

Bước 4: gõ lệnh: pip27.exe install Flask-1.0.2.tar
Chờ một lát là hệ thống tự động cài đặt xong.

Cách gửi và nhận file qua sftp bằng thư viện pyftp của Python

Trong nhiều trường hợp ta cần gửi hoặc nhận file qua sftp cho bảo mật. Ngôn ngữ Python có cho phép ta làm việc này với thư viện pysftp.

Đầu tiên cần cài đặt thư viện pysftp bằng pip:

pip install pysftp

Mình đã thử bằng nhiều cách trên mạng nhưng mãi mới có được cách sau, ví dụ và giải thích code luôn:

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
try:
	# Tạo kết nối qua sFTP
	with pysftp.Connection('192.168.xxx.xxx',username='admin',password='admin',cnopts = cnopts) as sftp:
		#Lấy 1 file từ server
		#file=sftp.get('đường dẫn full file trên server','thư mục ở local')
		#Mặc định không để 'thư mục ở local' thì sẽ để file mặc định tại thư mục code python
		file=sftp.get('/u02/extract/file_name.csv')
		#Chuyển 1 file từ local lên server
		#file=sftp.put('đường dẫn full file tại local','đường dẫn full file trên server')
		file=sftp.put('Extract_contacts_full20190301_tuy.csv','/u02/oracle/utl/extract/Extract_contacts_full20190301_tuy123.tcsv')
	sftp.close()
	print('Succeed')
except Exception as e:
	print('Error connect sfth Irdeto')

Như vậy là thành công, các bạn có thể tích hợp nó trong follow job của bạn như sau khi tạo file hoặc khi chuyển file xong thì gửi email…