day59——數據處理

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()
相關文章
相關標籤/搜索