day29-20180607笔记
笔记:Python3 数据处理
一、csv数据处理
Csv文件格式:
看下.csv文件的定义:
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
如一下格式:
27,20,14,15,14,12,94,64,37,1015,1013,1009,7,5,2,21,8,35,0.00,,,152
.csv文件可以直接用excel或者类似软件打开,样子都是我们常见的表格形式。
新建一个csv文件,如test.csv,内容如下:
1,2,3,4,5,6,7,8,9,10
10,9,8,7,6,5,4,3,2,1
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 20:26 # @Author : yangyuanqiang # @File : demon1.py import csv fileName = "test.csv" #通过csv模块处理数据 with open(fileName, "r", encoding="utf-8") as f: text = csv.reader(f) for line in text: for i in line: print(i) #通过字符串切割处理数据 # with open(fileName, "r", encoding="utf-8") as f: # for line in f: # for i in line.split(","): # print(i.strip())
以上实例输出的结果
1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1
注意:将数据存储为后缀.csv文件格式,可以使用excel程序打开.csv文件,会自动以逗号为换行
二、excel数据处理
python提供有第三方库来支持对excel的操作,python处理excel文件用的第三方模块库有xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。下面我们先安装第三方库
Pip install xlrd
Pip install xlwt
Pip install xluntils
Pip install pyExcelerator
Xlrd只能进行读取excel文件,没法进行写入文件,xlwt可以写入文件,但是不能在已有的excel的文件上进行修改,如果有这个需求,就需要使用xluntils模块了,pyExcelerator模块与xlwt类似,也可以用来生成excel文件
新建一个excel文件,名为test.xlsx,内容如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 21:19 # @Author : yangyuanqiang # @File : demon2.py #读取excel表的数据 import xlrd data = xlrd.open_workbook("test.xlsx") table = data.sheets()[0] #读取excel表里的下标表格 rows = table.nrows #查看有多少行数据 print("共有{0} ".format(rows) + " 行数据") cols = table.ncols #查看有多少列数据 print("共有{0} ".format(cols) + " 列数据") #一行一行取数据 for i in range(rows): print(table.row_values(i))
以上实例输出的结果
共有5 行数据 共有3 列数据 ['aaa', 'bbb', 'ccc'] [123.0, 456.0, 789.0] ['abc', 'abc', 'abc'] ['ddd', 'eee', 'fff'] ['12*', 'df1', '3dd']
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 21:19 # @Author : yangyuanqiang # @File : demon2.py #读取excel表的数据 import xlrd data = xlrd.open_workbook("test.xlsx") table = data.sheets()[0] #读取excel表里的下标表格 rows = table.nrows #查看有多少行数据 # print("共有{0} ".format(rows) + " 行数据") cols = table.ncols #查看有多少列数据 # print("共有{0} ".format(cols) + " 列数据") #一行一行取数据 # for i in range(rows): # print(table.row_values(i)) print("##"*10) #一列一列取数据 for j in range(cols): print(table.col_values(j))
以上实例输出的结果
#################### ['aaa', 123.0, 'abc', 'ddd', '12*'] ['bbb', 456.0, 'abc', 'eee', 'df1'] ['ccc', 789.0, 'abc', 'fff', '3dd']
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 21:19 # @Author : yangyuanqiang # @File : demon2.py #读取excel表的数据 import xlrd data = xlrd.open_workbook("test.xlsx") table = data.sheets()[0] #读取excel表里的下标表格 rows = table.nrows #查看有多少行数据 # print("共有{0} ".format(rows) + " 行数据") cols = table.ncols #查看有多少列数据 # print("共有{0} ".format(cols) + " 列数据") #一行一行取数据 # for i in range(rows): # print(table.row_values(i)) # print("##"*10) # #一列一列取数据 # for j in range(cols): # print(table.col_values(j)) print("###"*10) #按每行取第一个列的数据 for row in range(rows): for col in range(cols): cell = table.cell_value(row, col) print(cell)
以上实例输出的结果
############################## aaa bbb ccc 123.0 456.0 789.0 abc abc abc ddd eee fff 12* df1 3dd
写入excel文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 22:02 # @Author : yangyuanqiang # @File : demon3.py #写excel文件 import xlwt workbook = xlwt.Workbook() sheet1 = workbook.add_sheet("test1", cell_overwrite_ok=workbook) sheet1.write(0,0,"hello1") sheet1.write(0,1,"hello2") sheet1.write(0,2,"hello3") sheet1.write(1,0,"world1") sheet1.write(1,1,"world2") sheet1.write(1,2,"world3") workbook.save("testwrite.xls") print("create ok")
以上实例输出的结果
create ok
在当前目录下创建了一个testwrite.xls文件,内容如下:
三、pdf数据处理
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/9 18:04 # @Author : yangyuanqiang # @File : demon5.py #Python读出pdf文件 from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfparser import PDFPage from pdfminer.pdfinterp import PDFResourceManager, PDFTextExtractionNotAllowed from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.pdfdevice import PDFDevice from pdfminer.layout import LAParams from pdfminer.converter import PDFPageAggregator #获取文档对象,你把algorithm.pdf换成你自己的文件名即可。 fp=open("test.pdf","rb") #创建一个与文档相关联的解释器 parser=PDFParser(fp) #PDF文档对象,提供密码初始化,没有就不用带password参数。 doc=PDFDocument() parser.set_document(doc) doc.set_parser(parser) doc.initialize() #检查文件是否允许文本提取 if not doc.is_extractable: raise PDFTextExtractionNotAllowed #链接解释器和文档对象 # parser.set_document(doc) #doc.set_paeser(parser) #初始化文档 #doc.initialize("") #创建PDF资源管理器对象来存储共享资源 resource=PDFResourceManager() #参数分析器 laparam=LAParams() #创建一个聚合器 device=PDFPageAggregator(resource, laparams=laparam) #创建PDF页面解释器 interpreter=PDFPageInterpreter(resource,device) #使用文档对象得到页面集合 for page in doc.get_pages(): #使用页面解释器来读取 interpreter.process_page(page) #使用聚合器来获取内容 layout=device.get_result() for out in layout: if hasattr(out, "get_text"): print(out.get_text())
html转pdf文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/9 18:08 # @Author : yangyuanqiang # @File : demon6.py #抓取aming的linux教程,然后制作成pdf文件 #先抓取每个的网页,然后生成pdf文件 import codecs import os import sys import pdfkit import requests base_url = 'http://www.apelearn.com/study_v2/' if not os.path.exists("aming"): os.mkdir("aming") os.chdir("aming") s = requests.session() for i in range(1, 27): url = base_url + 'chapter' + str(i) + '.html' print(url) file = str(i) + '.pdf' print(file) config = pdfkit.configuration(wkhtmltopdf=r"D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe") try: pdfkit.from_url(url, file) except: continue