1、程序的基本逻辑处理

(1)if、elif、else的使用
>>> a=1>>> if a>2:...     print("666")... elif(a<0):...     print("777")... else:...     print(a)...>>>

** 指数(最高优先级) & 位和and运算符

(2)while的使用

while循环语法中,执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假false时,循环结束。while也可进行嵌套应用。


(3)break和coutinue用法

break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。break语句用在while和for循环中。

如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码continue 语句跳出本次循环,而break跳出整个循环。continue语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。continue语句用在while和for循环中。

2、字符串倒置

(1)列表倒置方法

方法一:列表序号倒置

b = 12345678c = str(b)c[::-1]87654321

方法二:函数使用

b = 123456c = list(str(b))c.reverse()print(c)

对字符串进行处理如下,例如:

>>>  strA = 'holloworld'>>> T = []>>> for i in strA:...     T.append(i)...>>> T.reverse()>>> print (''.join(T))dlrowolloh

3、列表解析

要求:列出1~10中大于等于4的数字的平方

方法一:

>>> L = [] >>> for i in range(1,11):...     if i >= 4: ...         L.append(i**2) ... >>> print L [16, 25, 36, 49, 64, 81, 100]

方法二:

>>>L = [ i**2 for i in range(1,11) if i >= 4 ]>>>print L [16, 25, 36, 49, 64, 81, 100]

4、正则匹配脏数据进行清洗

清洗常用函数如下所示:

python将数据归类 python类别数据处理_Image

5、csv 文件格式

看下.csv文件的定义:逗号分隔值(Comma-SeparatedValues,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或者类似软件打开,样子都是我们常见的表格形式。

示例一:

import csvfileName = '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(","))

6、excel数据处理

python提供有第三方库来支持对excel的操作,python处理excel文件用的第三方模块库有xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。下面我们先安装第三方库:


Pip install xlrdPip install xlwtPip install xluntilsPip install pyExcelerator


Xlrd只能进行读取excel文件,没法进行写入文件,xlwt可以写入文件,但是不能在已有的excel的文件上进行修改,如果有这个需求,就需要使用xluntils模块了,pyExcelerator模块与xlwt类似,也可以用来生成excel文件。

6.1读取单表文件:

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

6.2 读取单表文件复杂例子:

# 打开一个workbookworkbook = 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中所有行rownum_rows = worksheet1.nrowsfor curr_row in range(num_rows):    row = worksheet1.row_values(curr_row)    print('row%s is %s' % (curr_row, row))# 遍历sheet1中所有列colnum_cols = worksheet1.ncolsfor curr_col in range(num_cols):    col = worksheet1.col_values(curr_col)    print('col%s is %s' % (curr_col, col))# 遍历sheet1中所有单元格cellfor rown in range(num_rows):    for coln in range(num_cols):        cell = worksheet1.cell_value(rown, coln)        print(cell)

6.3、写入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.4、Excele来处理超链接import codecsimport xlwtbook = xlwt.Workbook()sheet_index = book.add_sheet('index')line=0for i in range(9):    link = 'HYPERLINK("{0}.txt", "{1}_11111")'.format(i, i)    sheet_index.write(line, 0, xlwt.Formula(link))    line += 1book.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)

6.4、Python进行修改excel文件


但是不支持使用xlsx文件,直接使用xlsx就没有问题,如果使用xlsx文件,容易发生问题。

import xlrdimport xlutils.copy#打开一个workbookrb = 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')

7、Python处理pdf文件

7.1、Python读出pdf文件

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2018/06/09 14:46# @Author  : jiangshan# @File    : demon1.pyfrom pdfminer.pdfparser import PDFParser, PDFDocumentfrom pdfminer.pdfparser import PDFPagefrom pdfminer.pdfinterp import PDFResourceManager, PDFTextExtractionNotAllowedfrom pdfminer.pdfinterp import PDFPageInterpreterfrom pdfminer.pdfdevice import PDFDevicefrom pdfminer.layout import LAParamsfrom 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())

7.2、抓取每个的网页,然后生成pdf文件

import codecsimport osimport sysimport pdfkitimport requestsbase_url = 'http://www.okay686.cn/'if not os.path.exists("okay686"):    os.mkdir("okay686")os.chdir("okay686")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

7.3、Html转pdf文件

合并多个pdf文件为一个pdf文件

import PyPDF2import os   #建立一个装pdf文件的数组pdfFiles = []for fileName in os.listdir('okay686'):    #遍历该程序所在文件夹内的文件        if fileName.endswith('.pdf'):   #找到以.pdf结尾的文件                    pdfFiles.append(fileName)   #将pdf文件装进pdfFiles数组内# pdfFiles.sort()   #文件排序print(pdfFiles)os.chdir("okay686")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()

8、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.

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

结果:JPEG (1080, 1920) RGB 并把图片打开,展示出来

8.1 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)是左上角。

8.2、抠图


需求,把头像给截图出来:

from PIL import Imageimage = 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中

8.3、图片拼合

from PIL import Imageimage = 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度,然后在拼接在一起

8.4、缩放:

from PIL import Imageinfile = "2.jpg"outfile = "new2.jpg"image = Image.open(infile)(x, y) = image.sizenewx = 300newy = int(y*newx/x)out = image.resize((newx, newy), Image.ANTIALIAS)out.show()4.5、验证码import randomimport stringimport sysimport mathfrom PIL import Image, ImageDraw, ImageFont, ImageFilter

8.5、验证码:

# 字体的位置,不同版本的系统会有不同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()I am a slow walker,but I never walk backwards.