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.

Ngôn ngữ lập trình Python
Ngôn ngữ lập trình Python

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…

Vấn đề Unicode với Python 3- Oracle

Đối với Python 3 thì string tự động được sử dụng với Unicode nhưng khi sử dụng Tiếng Việt thao tác xuống Database Oracle hoặc hiển thị dữ liệu Tiếng Việt lên thì bị lỗi.

Để khắc phục điều này khi sử dụng connect tới DB thì cần khai báo encoding và nencoding: cx_Oracle.connect(‘admin’,’admin’,dsn_tns,encoding=”UTF-8″, nencoding=”UTF-8″)

Ví dụ hoàn thiện với việc thêm mới dữ liệu Tiếng Việt:

#!/usr/bin/python

# -*- coding: utf8 -*-
from unicodedata import normalize
import cx_Oracle
cursor, connection = None, None
try:
    dsn_tns = cx_Oracle.makedsn('192.168.177.xxx' , 1522, 'orcl')
    connection = cx_Oracle.connect('admin','admin',dsn_tns,encoding="UTF-8", nencoding="UTF-8")
    cursor = connection.cursor()
    a=u"Lý do"
    b="reasons"
    c="INSERT INTO VN_TEMP_DIC (VN, EN,DAY_TIME,STATUS) VALUES ('%s','%s',sysdate,0)" % (a,b)
    cursor.execute(c)
    cursor.execute("COMMIT")
except cx_Oracle.DatabaseError as e:
    raise e
except Exception as e:
    raise e     
finally:
    if cursor != None:
        cursor.close()
    if connection != None:
        connection.close()


    

Ví dụ hoàn thiện với việc hiển thị dữ liệu tiếng Việt load từ DB:

#!/usr/bin/python
# -*- coding: utf8 -*-

import cx_Oracle
dsn_tns = cx_Oracle.makedsn('xxxxxxxxx' , 1522, 'orcl')
connection = cx_Oracle.Connection('admin','admin',dsn_tns,encoding="UTF-8", nencoding="UTF-8")
cur=connection.cursor()
content = 'however it not depend on column INDPOSTPONEADVANTAGES'
listword=content.split()
listr="";
for re in listword:
    listr=listr+"','"+re
listr=listr
listr=listr[3:]   
print(listr)
query="select a.EN,a.VN from VN_TEMP_DIC a where trim(a.EN) in('%s') order by a.STATUS desc,a.DAY_TIME desc" % (listr)
#print(query)
cur.execute(query)
for result in cur:
    print(result[0]+" - "+result[1])
cur.close()
connection.close

Xuất file pdf với python sử dụng thư viện pypdf

Do nhu cầu công việc mình cần tạo file pdf rồi gửi qua email cho mỗi người một file riêng. Trước đây để xuất tất cả dữ liệu ra 1 file pdf bằng birt report sau đó dùng tool cắt file và gửi bằng tay. Hoặc dùng birt report xuất file pdf cho từng người rồi gửi bằng tay…
Bây giờ số người cần gửi tăng lên, mình không thể gửi bằng tay như vậy được nên cần phải làm tự động thao tác này.
Bước cần làm đó là chuẩn bị cơ sở dữ liệu là excel hoặc database, sau đó dùng command line xuất file và gửi email cho từng người. Bước khó khăn đầu tiên và nhiều nhất đó là sử dụng python tự động xuất ra file pdf. Mình quyết định dùng môi trường windown và code bằng python với thư viện pypdf.

Link quan trọng để làm theo: https://www.blog.pythonlibrary.org/2018/06/05/creating-pdfs-with-pyfpdf-and-python/

Các bước quan trọng:

Bước 1: Cài python cho windown (google)
Bước 2: Cài pip cho python
Bước 3: Cài pyfpdf: python -m pip install fpdf
Bước 4: Tải và sử dụng Unicode với pyfpdf: https://pyfpdf.readthedocs.io/en/latest/Unicode/index.html
Đoạn code quan trọng để in ra được tiếng việt: pdf.add_font(‘DejaVu’, ”, ‘DejaVuSansCondensed.ttf’, uni=True)

Thành công khi kết hợp các ví dụ cơ bản trong link trên.

#!/usr/bin/python

# -*- coding: utf8 -*-

from fpdf import FPDF
 
class CustomPDF(FPDF):
 
    def header(self):
        # Set up a logo
        self.image('logo.jpg', 10, 8, 33)
        self.set_font('Arial', 'B', 10)
 
        # Add an address
        self.cell(50)
        self.cell(0, 5, 'CONG TY TNHH A VIET NAM', ln=1)
        self.cell(58)
        self.cell(0, 5, 'Dia chi: Tang 15, Thap A, Toa nha A,', ln=1)
        self.cell(60)
        self.cell(0, 5, '5321 Kim Ma, Ngoc Khanh, Ba Dinh, Ha Noi', ln=1) 
        self.cell(60)
        self.cell(0, 5, 'Tel: (+84-4) 6272 6600 -- Fax: (+84-4) 3771 4781', ln=1) 
        # Line break
        self.ln(8)
        self.cell(40)
        self.cell(0, 5, 'BANG TONG HOP CHIET KHAU THUONG MAI TREN DOANH SO', ln=1) 
        self.cell(60)
        self.cell(0, 5, 'CUA DAI LY BAN LE THANG 01/2019', ln=1) 
	
    def footer(self):
        self.set_y(-10)
 
        self.set_font('Arial', 'I', 8)
 
        # Add a page number
        page = 'Page ' + str(self.page_no()) + '/{nb}'
        self.cell(0, 10, page, 0, 0, 'C')
 
def create_pdf(pdf_path):
	data = [['','','', 'Thông tin tổng đại lý'],
			['','','Tên', 'Cong ty TNHH Thang Lai'],
			['','','Mã', '17000'],
			]
	data1 = [['STT','MA','TEN DAI LY', 'SO LUONG TB MOI','THANH TIEN(VND)'],
				['1','6501','Pham Khac Tuy rat Dep trai lai con hoc gioi', '100','45000'],
				['2','6502','ABC', '200','90000'],
				['2','6502','ABC', '200','90000'],
				['2','6502','ABC', '200','90000'],
				['3','6503','CONG TY TNHH THIET BI VA CONG NGHE NGOC ANH', '200','90000'],
				['','','', 'Tong tien gop','225000']
			]
	data4 = [['','NGUOI LAP BIEU','','KE TOAN TRUONG'],
				['','','',''],
				['','','',''],
				['','','',''],
				['','','',''],
				['','','','NGUYEN THI TO HAO']
				]			
	d2='CÔNG TY TNHH ATM VIỆT NAM'
	d1='CONG TY TNHH ATM TINH VIET NAM'
	d3='Địa chỉ: Tầng 15, Tháp A, Tòa Nhà B,'
	d31='Dia chi: Tang 15, Tháp A, Tòa Nhà B'
	pdf = FPDF()
    # Create the special value {nb}
	pdf.alias_nb_pages()
	pdf.add_page()
	pdf.set_font('DejaVu', '', 12)
	pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True)
	pdf.set_font('DejaVu', '', 14)
	pdf.image('logo.jpg', x=10, y=8, w=20)
	pdf.set_font('DejaVu', '', 10)
	pdf.cell(200, 5, txt=d2, ln=1, align="C")
	pdf.set_font('DejaVu', '', 8)
	pdf.cell(200, 5, txt=d31, ln=1, align="C")
	pdf.cell(200, 5, txt="521 Kim Ma, Ngoc Khanh, Ba Dinh, Ha Noi.", ln=1, align="C")
	pdf.cell(200, 5, txt="Tel: (+84-4) 6272 6600 -- Fax: (+84-4) 3771 4781", ln=1, align="C")
	pdf.ln(8)
	pdf.set_font('DejaVu', '', 12)
	pdf.cell(200, 5, txt='BANG TONG HOP CHIET KHAU THUONG MAI TREN DOANH', ln=1, align="C")
	pdf.cell(200, 5, txt='SO CUA DAI LY BAN LE THANG 1/2019', ln=1, align="C")
	pdf.ln(8)
	pdf.set_font('DejaVu', '', 10)
	col_width = pdf.w / 4.5
	row_height = pdf.font_size
	for row in data:
		for item in row:
			pdf.cell(col_width, row_height*1,txt=item, border=0)
		pdf.ln(row_height*1)
	pdf.cell(20, 5, txt='Ngay xuat:', ln=1, align="C")
	pdf.ln(8)
	col_width = pdf.w / 5.5
	col_width1 = col_width*1/3
	col_width2 = col_width*1/3
	col_width3 = col_width+col_width*2/3+col_width*2/3
	row_height = pdf.font_size
	i=0
	for row in data1:
		i=i+1
		if i==1:
			j=0
			for item in row:
				pdf.set_font('Times', 'B', 10)
				j=j+1
				if j==1:
					pdf.cell(col_width1, row_height*1.4,txt=item, border=1,ln = 0, align = 'C', fill = False, link = '')
				else:
					if j==3:
						pdf.cell(col_width3, row_height*1.4,txt=item, border=1,ln = 0, align = 'C', fill = False, link = '')
					else:
						if j==2:
							pdf.cell(col_width2, row_height*1.4,txt=item, border=1,ln = 0, align = 'C', fill = False, link = '')
						else:
							pdf.cell(col_width, row_height*1.4,txt=item, border=1,ln = 0, align = 'C', fill = False, link = '')
		else:
			j=0
			for item in row:
				pdf.set_font('Times', '', 10)
				j=j+1
				if j==1:
					pdf.cell(col_width1, row_height*1.4,txt=item, border=1, align = 'C', fill = False)
				else:
					if j==3:
						pdf.cell(col_width3, row_height*1.4,txt=item, border=1, align = 'L', fill = False)
					else:
						if j==2:
							pdf.cell(col_width2, row_height*1.4,txt=item, border=1, align = 'C', fill = False)
						else:
							pdf.cell(col_width, row_height*1.4,txt=item, border=1, align = 'R', fill = False)
		pdf.ln(row_height*1.4)
	line_no = 1
	pdf.ln(8)
	pdf.set_font('DejaVu', '', 10)
	col_width = pdf.w / 4.5
	row_height = pdf.font_size
	for row in data4:
		for item in row:
			pdf.cell(col_width, row_height*1,txt=item, border=0)
		pdf.ln(row_height*1)
#	for i in range(50):
#		pdf.cell(0, 10, txt="Line #{}".format(line_no), ln=1)
#		line_no += 1		
	pdf.output(pdf_path)
 
if __name__ == '__main__':
    create_pdf('header_footer.pdf')