1、CSV數據處理html
CSV文件格式:逗號分隔值(Comma-Separated Value,CSV,有時也稱爲字符分隔值,由於分隔符也能夠不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最多見的是逗號或製表符。一般,全部記錄都有徹底相同的字段序列。如如下格式:python
27,20,14,15,12,94,13,16,988,1015,0.00,152數組
csv文件能夠直接用Excel或者相似軟件打開,樣子都是咱們常見的表格格式。session
代碼例子:app
import csv fileName = 'weather.csv' with open(fileName, "r", encoding="utf-8") as f: text = csv.reader(f) for i in text: print(i) print("####"*10) with open(fileName, "r", encoding="utf-8") as f: for i in f.readlines(): print(i.split(","))
2、Excel數據處理dom
Python提供有第三方庫來支持對exec的操做,Python處理Excel文件用的第三方模塊庫有xlrd、xlwt、xluntils和pyExcelerator,除此以外,Python處理Excel還能夠用win32com和openpyxl模塊。ide
須要先安裝第三方庫:pip install xlrd pip install xlwt pip install xluntils pip install pyExcelrator字體
xlrd:讀取我Excel文件this
xlwt:寫入文件,可是不能在已有的Excel的文件進行修改,若是有這個需求,就須要使用xluntils模塊了。google
pyExcelerator模塊與xlwt相似,也能夠用來生成Excel文件
1.讀取單表文件:
def readExcel(): data = xlrd.open_workbook('test.xlsx') table = data.sheets()[0] # 打開第一張表 nrows = table.nrows # 獲取表的行數 for i in range(nrows): # 循環逐行打印 print(table.row_values(i))#經過row_values來獲取每行的值 readExcel()
# 打開一個workbook workbook = xlrd.open_workbook('testdata.xlsx') # 抓取全部sheet頁的名稱 worksheets = workbook.sheet_names() print(workbook.sheets()) print('worksheets is {0}'.format(worksheets)) # 定位到sheet1 # worksheet1 = workbook.sheet_by_name(u'Sheet1') worksheet1 = workbook.sheets()[1] """ #經過索引順序獲取 worksheet1 = workbook.sheets()[0] """ """ #遍歷全部sheet對象 for worksheet_name in worksheets: worksheet = workbook.sheet_by_name(worksheet_name) """ # 遍歷sheet1中全部行row num_rows = worksheet1.nrows for curr_row in range(num_rows): row = worksheet1.row_values(curr_row) print('row%s is %s' % (curr_row, row)) # 遍歷sheet1中全部列col num_cols = worksheet1.ncols for curr_col in range(num_cols): col = worksheet1.col_values(curr_col) print('col%s is %s' % (curr_col, col)) # 遍歷sheet1中全部單元格cell for rown in range(num_rows): for coln in range(num_cols): cell = worksheet1.cell_value(rown, coln) print(cell)
2.寫入Excel文件
import xlwt #建立workbook和sheet對象 workbook = xlwt.Workbook() #注意Workbook的開頭W要大寫 sheet1 = workbook.add_sheet('sheet1', cell_overwrite_ok=True) sheet2 = workbook.add_sheet('sheet2', cell_overwrite_ok=True) sheet3 = workbook.add_sheet('sheet3', cell_overwrite_ok=True) #向sheet頁中寫入數據 sheet1.write(0,0,'this should overwrite1') sheet1.write(0,1,'aaaaaaaaaaaa') sheet2.write(0,0,'this should overwrite2') sheet2.write(1,2,'bbbbbbbbbbbbb') #-----------使用樣式----------------------------------- #初始化樣式 style = xlwt.XFStyle() #爲樣式建立字體 font = xlwt.Font() font.name = 'Times New Roman' font.bold = True #設置樣式的字體 style.font = font #使用樣式 sheet3.write(0,1,'some bold Times text',style) #保存該excel文件,有同名文件時直接覆蓋 workbook.save('test2.xls') print('建立excel文件完成!')
3.Excel處理超連接
import codecs import xlwt book = xlwt.Workbook() sheet_index = book.add_sheet('index') line=0 for i in range(9): link = 'HYPERLINK("{0}.txt", "{1}_11111")'.format(i, i) sheet_index.write(line, 0, xlwt.Formula(link)) line += 1 book.save('simple2.xls') for i in range(0, 9): file = str(i) + ".txt" with codecs.open(file, 'w') as f: f.write(str(i)*10)
4.修改Excel文件,須要注意的是不支持使用xlsx文件
import xlrd import xlutils.copy #打開一個workbook rb = xlrd.open_workbook('aaa111.xls') wb = xlutils.copy.copy(rb) #獲取sheet對象,經過sheet_by_index()獲取的sheet對象沒有write()方法 ws = wb.get_sheet(0) #寫入數據 ws.write(10, 10, 'changed!') #添加sheet頁 wb.add_sheet('sheetnnn2',cell_overwrite_ok=True) #利用保存時同名覆蓋達到修改excel文件的目的,注意未被修改的內容保持不變 wb.save('aaa111.xls')
3、HTML轉PDF文件
轉換成PDF文件的三種方法:在工做中,咱們可能會遇到把HTML文件轉換成PDF文件,而Python給咱們提供了pdfkit這個模塊,咱們直接安裝使用就能夠了。
pdfkit幾個模塊的用法:先安裝:pip install pdfkit
1.網頁轉換成PDF:直接把url轉換成PDF文件
import pdfkit pdfkit.from_url('http://google.com', 'out1.pdf')
2.html轉換成PDF
import pdfkit pdfkit.from_file('test.html', 'out2.pdf')
3.字符串轉換成PDF
import pdfkit pdfkit.from_string('Hello lingxiangxiang!', 'out3.pdf')
代碼實例:抓取aming的Linux教程。而後製成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
4、Python處理PDF文件
Python讀出PDF文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/1/10 14:46 # @Author : lingxiangxiang # @File : demon1.py 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())
合併多個PDF文件爲一個PDF文件
import PyPDF2 import os #創建一個裝pdf文件的數組 pdfFiles = [] for fileName in os.listdir('aming'): #遍歷該程序所在文件夾內的文件 if fileName.endswith('.pdf'): #找到以.pdf結尾的文件 pdfFiles.append(fileName) #將pdf文件裝進pdfFiles數組內 # pdfFiles.sort() #文件排序 print(pdfFiles) os.chdir("aming") pdfWriter = PyPDF2.PdfFileWriter() #生成一個空白的pdf文件 for fileName in pdfFiles: pdfReader = PyPDF2.PdfFileReader(open(fileName,'rb')) #以只讀方式依次打開pdf文件 for pageNum in range(pdfReader.numPages):
print(pdfReader.getPage(pageNum))
pdfWriter.addPage(pdfReader.getPage(pageNum)) #將打開的pdf文件內容一頁一頁的複製到新建的空白pdf裏 pdfOutput = open('combine.pdf','wb') #生成combine.pdf文件pdfWriter.write(pdfOutput)
#將複製的內容所有寫入combine.pdfpdfOutput.close()
5、Python處理圖片
圖片處理是一門應用很是廣的技術,而擁有很是豐富第三方擴展庫的Python固然不會錯過這一門盛宴。PIL(Python Imaging Library)是Python中最經常使用的圖像處理庫。若是是Python2.x,能夠經過如下地址進行下載:http://www.pythonware.com/products/pil/index.html,找到相應的版本進行下載。
注意:PIL模塊在Python3中已經替換成pillow模塊,文檔地址:http://pillow.readthedocs.io/en/latest/,直接使用pip3 install pillow便可安裝模塊。導入時使用from PIL import Image
打開圖片
from PIL import Image image = Image.open("1.jpg") print(image.format, image.size, image.mode) image.show()
Image有三個屬性:
format:識別圖像的源格式,若是該文件不是從文件中讀取的,則被置爲None
size:返回一個元組,有兩個元素,其值爲像素意義上的寬和高
mode:RGB(true color image),此外還有,L(luminance),CMTK(pre-press image)
Image的方法介紹:
show():顯示最近加載的圖像
open(infilename):打開文件
save(outfilename):保存文件
crop((left,upper,right,lower)):從圖像中提取出某一個矩形大小的圖像。它接收到一個四元素的元組做爲參數,各元素爲(left,upper,right,lower),座標系統的原點 (0,0)是左上角
例子1:摳圖:把頭像給截圖出來
from PIL import Image image = Image.open("1.jpg") print(image.format, image.size, image.mode) box = (600, 300, 1050, 660) region = image.crop(box) region.save("cutting.jpg")
例子2:圖片拼合
from PIL import Image image = Image.open("1.jpg") print(image.format, image.size, image.mode) box = (600, 300, 1050, 660) egion = image.crop(box) #egion.save("cutting.jpg") region = egion.transpose(Image.ROTATE_180) image.paste(region, box) image.show()
例子3:縮放
from PIL import Image infile = "2.jpg" outfile = "new2.jpg" image = Image.open(infile) (x, y) = image.size newx = 300 newy = int(y*newx/x) out = image.resize((newx, newy), Image.ANTIALIAS) out.show()
例子4:驗證碼
import random import string import sys import math from PIL import Image, ImageDraw, ImageFont, ImageFilter # 字體的位置,不一樣版本的系統會有不一樣 font_path = 'msyh.ttf' # 生成幾位數的驗證碼 number = 4 # 生成驗證碼圖片的高度和寬度 size = (100, 30) # 背景顏色,默認爲白色 bgcolor = (255, 255, 255) # 字體顏色,默認爲藍色 fontcolor = (0, 0, 255) # 干擾線顏色。默認爲紅色 linecolor = (255, 0, 0) # 是否要加入干擾線 draw_line = True # 加入干擾線條數的上下限 line_number = 20 # 用來隨機生成一個字符串 def gene_text(): source = list(string.ascii_letters) for index in range(0, 10): source.append(str(index)) return ''.join(random.sample(source, number)) # number是生成驗證碼的位數 # 用來繪製干擾線 def gene_line(draw, width, height): begin = (random.randint(0, width), random.randint(0, height)) end = (random.randint(0, width), random.randint(0, height)) draw.line([begin, end], fill=linecolor) # 生成驗證碼 def gene_code(): width, height = size # 寬和高 image = Image.new('RGBA', (width, height), bgcolor) # 建立圖片 font = ImageFont.truetype(font_path, 25) # 驗證碼的字體 draw = ImageDraw.Draw(image) # 建立畫筆 text = gene_text() # 生成字符串 font_width, font_height = font.getsize(text) draw.text(((width - font_width) / number, (height - font_height) / number), text, font=font, fill=fontcolor) # 填充字符串 if draw_line: for i in range(line_number): gene_line(draw, width, height) # image = image.transform((width + 20, height + 10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR) # 建立扭曲 image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) # 濾鏡,邊界增強 image.save('idencode.png') # 保存驗證碼圖片 # image.show() if __name__ == "__main__": gene_code()