csv數據處理html
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或者相似軟件打開,樣子都是咱們常見的表格形式。python
1 代碼處理: 2 import csv 3 fileName = 'weather.csv' 4 with open(fileName, "r", encoding="utf-8") as f: 5 text = csv.reader(f) 6 for i in text: 7 print(i) 8 print("####"*10) 9 with open(fileName, "r", encoding="utf-8") as f: 10 for i in f.readlines(): 11 print(i.split(","))
python提供有第三方庫來支持對excel的操做,python處理excel文件用的第三方模塊庫有xlrd、xlwt、xluntils和pyExcelerator,除此以外,python處理excel還能夠用win32com和openpyxl模塊。下面咱們先安裝第三方庫linux
Pip install xlrdpython3.x
Pip install xlwt數組
Pip install xluntilssession
Pip install pyExceleratorapp
Xlrd只能進行讀取excel文件,無法進行寫入文件,xlwt能夠寫入文件,可是不能在已有的excel的文件上進行修改,若是有這個需求,就須要使用xluntils模塊了,pyExcelerator模塊與xlwt相似,也能夠用來生成excel文件dom
1 讀取單表文件: 2 import xlrd 3 4 def readExcel(): 5 data = xlrd.open_workbook('test.xlsx') 6 table = data.sheets()[0] # 打開第一張表 7 nrows = table.nrows # 獲取表的行數 8 for i in range(nrows): # 循環逐行打印 9 print(table.row_values(i))#經過row_values來獲取每行的值 10 11 readExcel()
1 讀取單表文件複雜例子: 2 # 打開一個workbook 3 workbook = xlrd.open_workbook('testdata.xlsx') 4 # 抓取全部sheet頁的名稱 5 worksheets = workbook.sheet_names() 6 print(workbook.sheets()) 7 print('worksheets is {0}'.format(worksheets)) 8 # 定位到sheet1 9 # worksheet1 = workbook.sheet_by_name(u'Sheet1') 10 worksheet1 = workbook.sheets()[1] 11 """ 12 #經過索引順序獲取 13 worksheet1 = workbook.sheets()[0] 14 """ 15 """ 16 #遍歷全部sheet對象 17 for worksheet_name in worksheets: 18 worksheet = workbook.sheet_by_name(worksheet_name) 19 """ 20 # 遍歷sheet1中全部行row 21 num_rows = worksheet1.nrows 22 for curr_row in range(num_rows): 23 row = worksheet1.row_values(curr_row) 24 print('row%s is %s' % (curr_row, row)) 25 # 遍歷sheet1中全部列col 26 num_cols = worksheet1.ncols 27 for curr_col in range(num_cols): 28 col = worksheet1.col_values(curr_col) 29 print('col%s is %s' % (curr_col, col)) 30 # 遍歷sheet1中全部單元格cell 31 for rown in range(num_rows): 32 for coln in range(num_cols): 33 cell = worksheet1.cell_value(rown, coln) 34 print(cell)
1 寫入excel文件 2 import xlwt 3 #建立workbook和sheet對象 4 workbook = xlwt.Workbook() #注意Workbook的開頭W要大寫 5 sheet1 = workbook.add_sheet('sheet1', cell_overwrite_ok=True) 6 sheet2 = workbook.add_sheet('sheet2', cell_overwrite_ok=True) 7 sheet3 = workbook.add_sheet('sheet3', cell_overwrite_ok=True) 8 #向sheet頁中寫入數據 9 sheet1.write(0,0,'this should overwrite1') 10 sheet1.write(0,1,'aaaaaaaaaaaa') 11 sheet2.write(0,0,'this should overwrite2') 12 sheet2.write(1,2,'bbbbbbbbbbbbb') 13 14 #-----------使用樣式----------------------------------- 15 #初始化樣式 16 style = xlwt.XFStyle() 17 #爲樣式建立字體 18 font = xlwt.Font() 19 font.name = 'Times New Roman' 20 font.bold = True 21 #設置樣式的字體 22 style.font = font 23 #使用樣式 24 sheet3.write(0,1,'some bold Times text',style) 25 26 #保存該excel文件,有同名文件時直接覆蓋 27 workbook.save('test2.xls') 28 print('建立excel文件完成!')
Excele來處理超連接ide
1 import codecs 2 import xlwt 3 book = xlwt.Workbook() 4 sheet_index = book.add_sheet('index') 5 line=0 6 for i in range(9): 7 link = 'HYPERLINK("{0}.txt", "{1}_11111")'.format(i, i) 8 sheet_index.write(line, 0, xlwt.Formula(link)) 9 line += 1 10 book.save('simple2.xls') 11 for i in range(0, 9): 12 file = str(i) + ".txt" 13 with codecs.open(file, 'w') as f: 14 f.write(str(i)*10)
Python進行修改excel文件:
可是不支持使用xlsx文件,直接使用xlsx就沒有問題,若是使用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')字體
Python處理pdf文件
1 Python讀出pdf文件 2 #!/usr/bin/env python 3 # -*- coding: utf-8 -*- 4 # @Time : 2018/1/10 14:46 5 # @Author : lingxiangxiang 6 # @File : demon1.py 7 from pdfminer.pdfparser import PDFParser, PDFDocument 8 from pdfminer.pdfparser import PDFPage 9 from pdfminer.pdfinterp import PDFResourceManager, PDFTextExtractionNotAllowed 10 from pdfminer.pdfinterp import PDFPageInterpreter 11 from pdfminer.pdfdevice import PDFDevice 12 from pdfminer.layout import LAParams 13 from pdfminer.converter import PDFPageAggregator 14 #獲取文檔對象,你把algorithm.pdf換成你本身的文件名便可。 15 fp=open("test.pdf","rb") 16 #建立一個與文檔相關聯的解釋器 17 parser=PDFParser(fp) 18 #PDF文檔對象,提供密碼初始化,沒有就不用帶password參數。 19 doc=PDFDocument() 20 21 parser.set_document(doc) 22 doc.set_parser(parser) 23 24 doc.initialize() 25 #檢查文件是否容許文本提取 26 if not doc.is_extractable: 27 raise PDFTextExtractionNotAllowed 28 #連接解釋器和文檔對象 29 # parser.set_document(doc) 30 #doc.set_paeser(parser) 31 #初始化文檔 32 #doc.initialize("") 33 #建立PDF資源管理器對象來存儲共享資源 34 resource=PDFResourceManager() 35 #參數分析器 36 laparam=LAParams() 37 #建立一個聚合器 38 device=PDFPageAggregator(resource, laparams=laparam) 39 #建立PDF頁面解釋器 40 interpreter=PDFPageInterpreter(resource,device) 41 #使用文檔對象獲得頁面集合 42 for page in doc.get_pages(): 43 #使用頁面解釋器來讀取 44 interpreter.process_page(page) 45 #使用聚合器來獲取內容 46 layout=device.get_result() 47 for out in layout: 48 if hasattr(out, "get_text"): 49 print(out.get_text())
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文件
先抓取每一個的網頁,而後生成pdf文件
1 import codecs 2 import os 3 import sys 4 5 import pdfkit 6 import requests 7 8 base_url = 'http://www.apelearn.com/study_v2/' 9 if not os.path.exists("aming"): 10 os.mkdir("aming") 11 12 os.chdir("aming") 13 s = requests.session() 14 15 for i in range(1, 27): 16 url = base_url + 'chapter' + str(i) + '.html' 17 print(url) 18 file = str(i) + '.pdf' 19 print(file) 20 config = pdfkit.configuration(wkhtmltopdf=r"D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe") 21 try: 22 pdfkit.from_url(url, file) 23 except: 24 continue
合併多個pdf文件爲一個pdf文件
1 import PyPDF2 2 import os 3 #創建一個裝pdf文件的數組 4 pdfFiles = [] 5 for fileName in os.listdir('aming'): #遍歷該程序所在文件夾內的文件 6 if fileName.endswith('.pdf'): #找到以.pdf結尾的文件 7 pdfFiles.append(fileName) #將pdf文件裝進pdfFiles數組內 8 # pdfFiles.sort() #文件排序 9 print(pdfFiles) 10 os.chdir("aming") 11 pdfWriter = PyPDF2.PdfFileWriter() #生成一個空白的pdf文件 12 for fileName in pdfFiles: 13 pdfReader = PyPDF2.PdfFileReader(open(fileName,'rb')) #以只讀方式依次打開pdf文件 14 for pageNum in range(pdfReader.numPages): 15 print(pdfReader.getPage(pageNum)) 16 pdfWriter.addPage(pdfReader.getPage(pageNum)) #將打開的pdf文件內容一頁一頁的複製到新建的空白pdf裏 17 pdfOutput = open('combine.pdf','wb') #生成combine.pdf文件 18 pdfWriter.write(pdfOutput) #將複製的內容所有寫入combine.pdf 19 pdfOutput.close()
Python處理圖片
圖像處理是一門應用很是廣的技術,而擁有很是豐富第三方擴展庫的 Python 固然不會錯過這一門盛宴。PIL (Python Imaging Library)是 Python 中最經常使用的圖像處理庫,若是你是python2.x,能夠經過如下地址進行下載:http://www.pythonware.com/products/pil/index.htm,找到相對應的版本進行下載就能夠了。
注意:PIL模塊在python3.x中已經替換成pillow模塊,文檔地址:http://pillow.readthedocs.io/en/latest/,直接使用pip3 install pillow便可安裝模塊,導入時使用from PIL import Image.
1 from PIL import Image 2 image = Image.open("1.jpg") 3 print(image.format, image.size, image.mode) 4 image.show()
結果: JPEG (1080, 1920) RGB
並把圖片打開,展現出來
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)是左上角。
Image的幾何處理:
out = im.resize((128, 128)) #調整圖片大小
out = im.rotate(45) #逆時針旋轉 45 度角。
out = im.transpose(Image.FLIP_LEFT_RIGHT) #左右對換。
out = im.transpose(Image.FLIP_TOP_BOTTOM) #上下對換。
out = im.transpose(Image.ROTATE_90) #旋轉 90 度角。
out = im.transpose(Image.ROTATE_180) #旋轉 180 度角。
out = im.transpose(Image.ROTATE_270) #旋轉 270 度角。
例子1:摳圖 需求,把頭像給截圖出來:
1 from PIL import Image 2 image = Image.open("1.jpg") 3 print(image.format, image.size, image.mode) 4 box = (600, 300, 1050, 660) 5 region = image.crop(box) 6 region.save("cutting.jpg")
例子2:圖片拼合
1 from PIL import Image 2 image = Image.open("1.jpg") 3 print(image.format, image.size, image.mode) 4 box = (600, 300, 1050, 660) 5 egion = image.crop(box) 6 #egion.save("cutting.jpg") 7 region = egion.transpose(Image.ROTATE_180) 8 image.paste(region, box) 9 image.show()
把頭像照片截取出來,而後調換頭像照片180度,而後在拼接在一塊兒,
上述代碼講圖片的((600, 300), (600, 660), (1050, 300), (1050, 660))所畫出來的區域進行裁剪,並保存在cutting.jpg中
例子3:縮放:
1 from PIL import Image 2 3 infile = "2.jpg" 4 outfile = "new2.jpg" 5 image = Image.open(infile) 6 (x, y) = image.size 7 newx = 300 8 newy = int(y*newx/x) 9 out = image.resize((newx, newy), Image.ANTIALIAS) 10 out.show()
例子4:驗證碼
1 import random 2 import string 3 import sys 4 import math 5 from PIL import Image, ImageDraw, ImageFont, ImageFilter 6 7 # 字體的位置,不一樣版本的系統會有不一樣 8 font_path = 'msyh.ttf' 9 # 生成幾位數的驗證碼 10 number = 4 11 # 生成驗證碼圖片的高度和寬度 12 size = (100, 30) 13 # 背景顏色,默認爲白色 14 bgcolor = (255, 255, 255) 15 # 字體顏色,默認爲藍色 16 fontcolor = (0, 0, 255) 17 # 干擾線顏色。默認爲紅色 18 linecolor = (255, 0, 0) 19 # 是否要加入干擾線 20 draw_line = True 21 # 加入干擾線條數的上下限 22 line_number = 20 23 24 25 # 用來隨機生成一個字符串 26 def gene_text(): 27 source = list(string.ascii_letters) 28 for index in range(0, 10): 29 source.append(str(index)) 30 return ''.join(random.sample(source, number)) # number是生成驗證碼的位數 31 32 33 # 用來繪製干擾線 34 def gene_line(draw, width, height): 35 begin = (random.randint(0, width), random.randint(0, height)) 36 end = (random.randint(0, width), random.randint(0, height)) 37 draw.line([begin, end], fill=linecolor) 38 39 40 # 生成驗證碼 41 def gene_code(): 42 width, height = size # 寬和高 43 image = Image.new('RGBA', (width, height), bgcolor) # 建立圖片 44 font = ImageFont.truetype(font_path, 25) # 驗證碼的字體 45 draw = ImageDraw.Draw(image) # 建立畫筆 46 text = gene_text() # 生成字符串 47 font_width, font_height = font.getsize(text) 48 draw.text(((width - font_width) / number, (height - font_height) / number), text, font=font, fill=fontcolor) # 填充字符串 49 if draw_line: 50 for i in range(line_number): 51 gene_line(draw, width, height) 52 53 # image = image.transform((width + 20, height + 10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR) # 建立扭曲 54 image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) # 濾鏡,邊界增強 55 image.save('idencode.png') # 保存驗證碼圖片 56 # image.show() 57 58 59 if __name__ == "__main__": 60 gene_code()