數據處理

1、CSV數據處理html

Csv文件格式python

1.一、定義: linux

  逗號分隔值(Comma-Separated Values,CSV,有時也稱爲字符分隔值,由於分隔字符也能夠不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最多見的是逗號或製表符。一般,全部記錄都有徹底相同的字段序列。python3.x

如一下格式:數組

27,20,14,15,14,12,94,64,37,1015,1013,1009,7,5,2,21,8,35,0.00,,,152session

.csv文件能夠直接用excel或者相似軟件打開,樣子都是咱們常見的表格形式app

示例:dom

import csv

fileName = 'test.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數據處理ide

  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文件

2.一、讀取單表文件:

import xlrd

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()

示例:

import xlrd

data = xlrd.open_workbook("test.xlsx")
table = data.sheets()[0]
rows = table.nrows
cols = table.ncols
print(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)

讀取單表文件複雜例子:

# 打開一個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文件完成!')

2.三、Excele來處理超連接

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)

2.四、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')

3、Python處理pdf文件

3.一、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())

 4、Html轉pdf文件(pdfkit模塊

4.一、在工做中,咱們可能會遇到把html文件轉換成pdf文件,而python給咱們提供了pdfkit這個模塊,咱們直接安裝使用就能夠了,下面咱們就下來介紹一個pdfkit模塊的幾種用法:

①、網頁轉換成pdf,直接把url轉換成pdf文件

import pdfkit
pdfkit.from_url('http://google.com', 'out1.pdf')

②、Html轉換成pdf

import pdfkit
pdfkit.from_file('test.html', 'out2.pdf')

③、字符創轉換成pdf

import pdfkit
pdfkit.from_string('Hello lingxiangxiang!', 'out3.pdf')

4.二、抓取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

4.三、合併多個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.pdf
pdfOutput.close()

5、處理圖片

5.一、釋義

圖像處理是一門應用很是廣的技術,而擁有很是豐富第三方擴展庫的 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

from PIL import Image

image = Image.open("1.jpg")
print(image.format, image.size, image.mode)
image.show()


結果:
JPEG (1080, 1920) RGB
並把圖片打開,展現出來

5.二、Image的三個屬性:

  • format : 識別圖像的源格式,若是該文件不是從文件中讀取的,則被置爲 None 值
  • size : 返回的一個元組,有兩個元素,其值爲象素意義上的寬和高
  • mode : RGB(true color image),此外還有,L(luminance),CMTK(pre-press image)

5.三、Image的方法介紹:

  • show():顯示最近加載的圖像
  • open(infilename):  打開文件
  • save(outfilename):保存文件
  • crop((left, upper, right, lower)):從圖像中提取出某個矩形大小的圖像。它接收一個四元素的元組做爲參數,各元素爲(left, upper, right, lower),座標系統的原點(0, 0)是左上角

5.四、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:摳圖

需求,把頭像給截圖出來:

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")

上述代碼講圖片的((600, 300), (600, 660), (1050, 300), (1050, 660))所畫出來的區域進行裁剪,並保存在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()

把頭像照片截取出來,而後調換頭像照片180度,而後在拼接在一塊兒

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