01
02月
2020
1、字符串
"hello"+" "+"world" # 连接字符串 输出 hello world "hello" * 5 # 复制字符串 输出 'hellohellohellohellohello' print(len("hello world")) # 获取字符串的长度 输出 11 "hello".upper() # 将字符串转化为大写 输出 HELLO 'HELLO'.lower() # 将字符串转化为小写 输出 hello "hello".islower() # 判断字符串是否全为小写 若是 返回True .isupper() # 判断字符串是否全为大写 若是 返回True .isalpha() # 字符串只包含字母并且非空 返回True .isalnum() # 字符串只包含字母或数字并且非空 返回True .isdecimal() # 字符串只包含数字并且非空 返回True .istitle() # 字符串已大写字母开头后面全是小写字母 返回True .startswith('hello') # 判断字符串是否是以某个字符串开头 若是 返回True .endswith('world') # 判断字符串是否是以某个字符串结尾 若是 返回True ",".join(['cats', 'rats', 'bats']) # 输出'cats,rats,bats' 将数组内元素以某个字符拼接成字符串 'cats,rats,bats'.split(',') # 输出 ['cats', 'rats', 'bats'] 将字符串分割为数组,默认以空格分割 "hello".rjust(20, "*") # 输出 ***************hello 指定长度,原字符串不够,左边填充字符* ,第二个参数可选 默认空格填充 "hello".ljust(20, "*") # 输出 hello*************** 指定长度,原字符串不够,右边填充字符* ,第二个参数可选 默认空格填充 "hello".center(20, "*") # 输出 *******hello******** 指定长度,原字符串不够,左右填充字符* ,第二个参数可选 默认空格填充 " hello ".strip() # 删除两边的空格,可传参,表示删除两边指定字符,字符与顺序无关 如 strip('1234') 和 strip('4231') 一样 " hello ".lstrip() # 删除左边的空格 " hello ".rstrip() # 删除右边的空格 pyperclip 模块 # 与计算机自身的拷贝粘贴关联 import pyperclip pyperclip.copy('hello world') # 设置计算机自身拷贝的内容 pyperclip.paste() # 粘贴输出计算机拷贝的内容
2、数组列表
arr = ['1', '2', '3', '4', '5'] print(arr[-1]) # 负数下标 输出 5 print(arr[1:4]) # 数组切片 ['2', '3', '4'] 输出 下标是1-4的值 print(arr[0:-1]) # ['1', '2', '3', '4'] 输出 下标0到-1 之间的值 -1相当于len(arr)-1 print(arr[:2]) # ['1', '2'] 输出 下标 0-2的值 len(arr) # 数组长度 输出 5 del arr[1] # 删除数组元素 输出 ['1', '3', '4', '5'] '1' in arr # True 判断值是否在数组中 '1' not in arr # False num1, num2, num3, num4 = arr #多重赋值,4个变量对应数组内的值,变量的数量必须和数组长度相等 arr.index('3') # 输出1 获取 值在数组内下标 arr.appent('6') # 在数组最后一位添加值 arr.insert(1, '2') # 在数组下标1的地方插入一个值 arr.remove('2') # 根据值去删除元素 删除前最好先用 in 判断是否在数组中 arr.sort() # 对数组排序 正序 arr.sort(reverse=True) 倒序 tuple(arr) # 将数组转化为tuple , tuple 是不可变数组, 数组内元素不可改变 list(tuple) # 将tuple 转成一个可变数组 range() # 可传3个参数 for(i in range(5)): print(i) # 0 1 2 3 4 for(i in range(3, 5)): print(i) # 3 4 for(i in range(0, 10, 2)): print(i) # 0 2 4 6 8 列表推导式 n_list = [x ** 2 for in range(10) if x%2 == 0] 等价于 n_list=[] for x in range(10) if x % 2 == 0: n_list.append(x ** 2)
3、json 字典
jsonStr = {'color': 'red', 'age': 24} jsonStr.values() # 获取值, 输出 ['red', 24] jsonStr.keys() # 获取键,输出 ['color', 'age'] jsonStr.items() # 获取键值对,输出 [('color', 'red'), ('age', 24)] jsonStr.get('age', 3) # 根据键获取值,输出 24,第二个参数是如果键值不存在返回的默认值 jsonStr.setdefault('name', 'zhaowenbin') # 设置json键值 输出 zhaowenbin 第一个参数是键名,第二个参数是要设置的值,如果键存在,返回存在的值,否则会给json添加一个新的键值并返回设置的值
4、正则匹配
import re numRegex = re.compile('\d+') # 实例化一个Regex对象 compile 可传第二个参数 re.DOTALL 匹配所有字符包括换行 re.I 不区分大小写 mo = numRegex.search('jcjcl123mckdsc456') #匹配字符串(单匹配) mo.group() # 获取匹配到的值,输出123 或 numRegex.findall('jcjcl123mckdsc456') #多匹配 输出 ['123','456'] 替换字符串 numRegex.sub('000', 'jcjcl123mckdsc456') #输出 jcjcl000mckdsc000 第一个参数是替换的字符串, 第二个参数是被替换的字符串
5、文件操作
import os os.path.join('usr', 'bin', 'spam') # 将字符拼接成路径 输出 'usr/bin/spam' os.getcwd() # 获取当前目录 输出 /Users/echo os.chdir('/Library/WebServer/Documents') # 将当前目录设置为 os.makedirs('/Library/WebServer/Documents') # 创建文件夹 会递归创建所有不存在的文件夹 os.path.abspath('./Documents') # 根据相对路径返回绝对路径 os.path.isabs(path) # 判断是否为绝对路径,若是返回True os.path.basename("/Library/WebServer/Documents/index.html") # 获取文件名 输出 index.html os.path.dirname("/Library/WebServer/Documents/index.html") # 获取文件路径/Library/WebServer/Documents os.path.split("/Library/WebServer/Documents/index.html") # 获取文件路径和文件名 输出元组('/Library/WebServer/Documents', 'index.html') os.path.sep # 文件路径的分隔符 linux、mac上是/ , windows上是\\ 如 :"/Library/WebServer/Documents/index.html".split(os.path.sep) os.path.getsize('/Library/WebServer/Documents/index.html') # 获取文件大小 os.listdir('/Library/WebServer/Documents') # 获取文件夹下的所有文件 os.path.exists('/Library/WebServer/Documents') # 判断文件或文件夹是否存在 输出True os.path.isdir('/Library/WebServer/Documents') # 判断是否是一个文件夹 os.path.isfile('/Library/WebServer/Documents/index.html') # 判断是否是一个文件 # 文件读写 filehandle = open("/Library/WebServer/Documents/index.html") # 创建一个file对象 filecontent = filehandle.read() # 读取文件内容 filecontent = filehandle.readlines() # 读取文件内容 列表 每行数据是列表中一个元素 filehandle = open("/Library/WebServer/Documents/index.html", "w") # 第二个参数w表示写模式 a表示添加模式 filehandle.write('aaa') # w会覆盖源文件, a在源文件后添加写入 # shutil 模块 import shutil shutil.copy('/Library/WebServer/Documents/index.html','/Library/WebServer/' ) # 文件拷贝 原路径 目标路径 shutil.copytree('/Library/WebServer', '/Library') # 递归拷贝文件夹下面的所有文件和文件夹 原路径 目标路径 shutil.move('/Library/WebServer/Documents/index.html','/Library/WebServer/' ) # 文件移动和改名 原路径 目标路径 os.unlink('/Library/WebServer/Documents/index.html') #删除文件 os.rmdir('/Library/WebServer/Documents') #删除文件夹 必须是空文件夹 shutil.rmtree('/Library/WebServer/Documents') #删除文件夹 递归删除下面所有的文件和文件夹 # zipfile 解压缩文件 import zipfile ziphandle = zipfile.ZipFile('example.zip') #实例化一个zipfile对象 ziphandle.namelist() #返回zip内所有文件和文件夹列表 ziphandle.extractall('/Library/WebServer/Documents') #解压缩到指定目录 默认当前目录 ziphandle.extractall('example.txt', '/Library/WebServer/Documents') # 解压缩zip内单个文件到指定目录 默认当前目录 ziphandle.close() ziphandle = zipfile.ZipFile('example.zip', 'w') # 实例化一个zipfile对象 w 覆盖写入 a 添加模式 ziphandle.write('example.txt', compress_type=zipfile.ZIP_DEFLATED) # 压缩文件到zip 第二个参数指定压缩类型 ziphandle.close()
6、日志
import logging logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s') # 设置日志显示最低级别 和 日志输出格式 日志级别 DEBUG INFO WARNING ERROR CRITICAL logging.debug('output logging') # 输出日志 logging.info('output logging') logging.warning('output logging') logging.error('output logging') logging.critical('output logging') logging.disable(logging.CRITICAL) # 禁用当前级别和更低级别日志的显示 logging.basicConfig(filename='log.txt', level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s') # 将日志输入到文件中, 而不是显示在屏幕上
7、网络请求requests
安装 pip3 install requests import requests headers = { "Accept":"text/html,application/xhtml+xml,application/xml;", "Accept-Encoding":"gzip, deflate, sdch", "Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6", "Referer":"http://www.xicidaili.com", "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36" } # 请求头 proxy = { 'http': '120.25.253.234:812', 'https' '163.125.222.244:8123' } # 请求代理 response = requests.get('http://www.baidu.com', params={'name': 'tom', 'age':20}, headers=headers,proxies=proxy) response = requests.post('http://httpbin.org/post', data={'name': 'tom', 'age':20}) print(response.status_code) # 打印状态码 print(response.url) # 打印请求url print(response.headers) # 打印头信息 print(response.cookies) # 打印cookie信息 print(response.text) # 以文本形式打印网页源码 print(response.json()) # 获取返回的json print(response.content) # 以字节流形式打印
8、Excel操作
# 读excel文档 openpyxl 模块 文档 import openpyxl wb = openpyxl.load_workbook('example.xlsx') wb.get_sheet_names() # 获取所有表名的列表 输出 ['Sheet1', 'Sheet2', 'Sheet3'] sheet = wb.get_sheet_by_name('Sheet3') # 根据表名获取工作表对象 sheet = wb.get_active_sheet() # 获取当前工作表的表对象 c = sheet['A1'] # 表中单元格的对象 c.value # 单元格的值 c.row # 单元格所处行 c.colum # 单元格所处列 sheet.cell(row=1, column=2) # 根据行列获取单元格对象 sheet.get_heightest_row() # 获取表行数 输出一个整数 sheet.get_heightest.column() # 获取表列数 输出一个整数 from openpyxl.cell import get_column_letter, column_index_from_string get_cloumn_letter(1) # 根据数字获取列对应的字母 输出A get_index_from_string('A') # 根据列字母获取对应的数字 输出 1 sheet['A1':'C3'] # 切片获取单元格列表 sheet.colums[1] # 获取整列的元组列表 sheet.rows['A'] # 获取整行的元组列表 # 写excel文档 wb = openpyxl.Workbook() # 创建一个workbook空对象 sheet = wb.get_active_sheet() sheet.title='sheet1' # 设置表名 sheet['A1'] = 'hello world' # 设置单元格的值 wb.save('example.xlsx') # 保存Excel wb.creat_sheet(index=0, title='sheet1') # 创建一个工作表,两个参数可选,第一个是工作表的位置,第二个是表名 wb.remove_sheet(wb.get_sheet_by_name('sheet1')) # 根据表名获取一个表对象,然后删除表 # 设置单元格字体样式 from openpyxl.styles import Font, Style fontObj = Font(name='Times new Roman', bold=True) # 实例化一个字体对象 字体对象可接收4个参数 name 字体名称 size 字体大小 bold 是否加粗(True or False) italic 是否斜体(True or False) styleObj = Style(font=fontObj) # 实例化一个样式对象,传入字体 sheet['A1'] .style/styleObj # 设置单元格的样式 sheet['A1'] = 'test excel fonts' # 设置公式 sheet['A9'] = '=SUM(A1:A8)' # 单元格插入公式 sheet['A9'].value # 获取单元格的值会得到公式字符串 输出 'SUM(A1:A8)' ,如果想要获取计算过后的值,可以在load_workbook时传入data_only=True # 设置行高和列宽 sheet.row_dimensions[1].height = 70 # 设置第一行的行高为70 sheet.row_dimensions['B'].width = 20 # 设置B列的列宽是20 # 合并和拆分单元格 sheet.merge_cells('A1:D3') # 合并单元格 sheet.unmerge_cells('A1:D3') # 拆分单元格 sheet.freeze_panes = "A2" # 冻结单元格(单元格悬浮,滚动滚条单元格始终可见) 冻结单元格上边的所有行和左边的所有列,单元格所在的行或列不会被冻结 sheet.freeze_panes = "A1" 或 sheet.freeze_panes = None # 解冻所有的单元格
9、处理PDF
pip install PyPDF2 # 读取PDF文本 import PyPDF2 pdfObj = open('example.pdf', 'rb') # 打开一个PDF pdfReader = PyPDF2.PdfFileReader(pdfObj) # 读取pdf,获取一个pdf对象 pdfReader.numPages # 获取PDF的页数 pdfReader.isEncrypted # 获取PDF是否加密 若PDF加密返回True pdfReader.decrypt('密码') # 输入密码,解密PDF pageObj = pdfReader.getPage(0) # 读取PDF某一页 pageObj.rotateClockwise(90) # 旋转页面,参数为旋转的度数 pageObj.extractText() # 获取pdf的文本 pdfWriter = PyPDF2.PdfFileWriter() # 获取PDF的写对象 pdfWriter.addPage(pageObj) # 给PDF添加一个页面,将一个PDF的页面对象添加到哪另一个pdf中 pdfWriter.encrypt('密码') # 为pdf加密,参数为加密的密码 pdfFile = open('example.pdf', 'wb') pdfWriter.writer(pdfFile) # 将pdf保存到文件中 pdfFile.close() pageObj.merge(pageObj2) # 将一个pdf叠加的另一个pdf上
10、处理Word文档
pip install python-docx import docx doc = docx.Document('demo.docx') # 获取文档对象 len(doc.paragraphs) # 文档对象的段落数 doc.paragraphs[0].text # 获取某个段落的文本 len(doc.paragraphs[0].runs) # 获取一个段落的runs对象的个数,一个段落样式相同的部分为一个runs doc.paragraphs[0].runs[0].text # 获取一个run对象的文本 paraObj = doc.add_paragraph('Hello world') # 添加一个段落 paraObj.add_run(' hello ') # 给段落添加一个run doc.add_heading('header', 1) # 添加标题,第二个参数表示是几级标题 doc.add_paragraph[0].runs[0].add_break(docx.text.WD_BREAK.PAGE) # add_break 不传参添加一个换行符,传docx.text.WD_BREAK.PAGE 表示换页符 doc.add_picture('test.png', width=docx.shared.Inches(1), height=docx.shared.Cm(1)) # 添加图片,width图片宽,height 图片高 doc.save('example.docx') # 保存文档
11、操作CSV
import csv # 读 exampleFile = open('example.csv') # 打开一个csv文件 exampleReader = csv.reader(exampleFile) # 读取文件内容 exampleData = list(exampleReader) # 将内容放入一个list列表中 for row in exampleReader exampleReader.line_num #当前行的行数 row #当前行的内容 # 写 outputFile = open('example.csv', 'w', newline='') # 以写方式打开一个csv文件,newline固定传一个空串 outputWriter = csv.writer(outputFile) # 获取一个写对象 outputWriter.writerow(['aaa', 'bbb', 'ccc']) # 写内容 outputFile.close() # 关闭文件
12、处理json
# 处理json import json jsonValue = json.loads('{"name": "example"}') # 字符串转json jsonStr = json.dumps({"name": "example"}) # json转字符串
13、time模块
import time time.time() # 获取Unix时间戳 输出 1546529650.038243 time.sleep() # 睡眠函数,传秒数 round(time.time(), 2) # 四舍五入保留两位小数
14、datetime模块
datetime.datetime.now() # 获取当前时间的日期格式 输出 datetime.datetime(2019, 1, 3, 23, 40, 37, 640257) 年 月 日 时 分 秒 微妙 dt = datetime.datetime(2019, 1, 3, 23, 40, 37, 640257) dt.year # 获取年 输出 2019 dt.month # 获取月 输出 1 dt.day # 获取天 输出 3 dt.hour # 获取时 输出 23 dt.minute # 获取分 输出 40 dt.second # 获取秒 输出 37 datetime.datetime.fromtimestamp(time.time()) # 将时间戳转化为日期格式,输出 datetime.datetime(2019, 1, 3, 23, 40, 37, 640257) # datetime 可直接用于比较大小 delta = datetime.timedelta(days=11, hours=10, minutes=9,seconds=8) # 获取一个时间段 可传 weeks days hours minutes seconds milliseconds microseconds 没有 month 和 year delta.days # 时间段的天数 输出11 delta.seconds # 时间段的秒数 输出36548 不带天的秒数 delta.microseconds # 获取微秒 delta.total_seconds() # 总秒数(带天数) datetime.datetime.now() + datetime.timedelta(days=100) # 可以直接相加 datetime.datetime(2019, 1, 3, 23, 40, 37, 640257).strftime('%Y/%m/%d %H:%M:%S') # 格式化时间戳 输出 '2019/01/03 23:40:37' %Y 年 2019 %y 年 19 %m 月 01 %B 月 November %b 月 简写 Nov %d 天 04 %j 天 一年的第几天 365 %w 天 一周第几天 0-6 %A 周几 Monday %a 周几 简写 Mon %H 小时 01 %I 小时 01-12 %M 分 00-59 %S 秒 00-59 %p AM或PM %% 转义就是% datetime.datetime.strptime('2019/01/03 23:40:37', '%Y/%m/%d %H:%M:%S') # 字符串转化为datetime格式
15、图像处理
pip install pillow from PIL import ImageColor ImageColor.getcolor('red', 'RGBA') # 输出(255, 0, 0,255)根据颜色获取RGBA值 from PIL import Image Im = Image.open('test.png') Im.size # 图片宽高 输出 (816, 1088) Im.filename # 获取文件名称 输出 test.png Im.format # 获取文件类型 输出 PNG Im.save('test.jpg') # 保存为jpg格式 Im=Image.new('RGBA', (100, 200), 'red') # 创建一个空白图片 背景色值类型 图片大小 背景色(默认黑色) croppedIm = Im.crop((335, 345, 565, 560)) # 裁切图像 croppedIm.save('cropped.png') # 保存裁切后的图像 copyIm = Im.copy() copyIm.paste(Im, (0, 0)) # 将一张图片合并到另一张图片上 第二个参数是放置的位置 resizeIm = Im.resize(100, 100) # 修改图片宽高 Im.rotate(90, expand=True).save('rotate.png') # 旋转图片并保存为新图像 expand 可选 旋转后的图片是否适应画布 Im.transpose(Image.FLIP_LEFT_RIGHT).save('horizontal.png') # 水平翻转图片 Im.transpose(Image.FLIP_TOP_BOTTOM).save('vertical.png') # 垂直翻转图片 im.getpixel((0, 0)) # 获取图像某一坐标的色值 传入 坐标 输出RGBA色值(0,0,0,0) im.putpixel((0,0), (210, 210, 210)) # 修改某一坐标色值 传入坐标 和 色值(RGB 或 RGBA) from PIL import Image, ImageDraw # 在图像上绘制图形 Im=Image.new('RGBA', (100, 200), 'red') draw = ImageDraw.Draw(Im) # 获取一个绘图对象 draw.line([(0,0), (199, 0),(199, 199), (0, 199), (0, 0)], fill='black',width=1) # 绘制直线 连接点的坐标 fill 线条颜色 可选 默认黑色 width 线条宽度 可选 默认1 draw.rectangle((20, 30, 60, 60), fill='blue', outline='black') # 绘制矩形 (左上角x 左上角y 右下角x 右下角y) 填充颜色 可选 轮廓颜色 可选 draw.ellipse((120, 30, 160, 60), fill='red', outline='black') # 绘制椭圆 (包含椭圆的矩形的坐标) 填充颜色 可选 轮廓颜色 可选 draw.line(((0,0), (199, 0),(199, 199), (0, 199), (0, 0)), fill='black', outline='black') # 绘制多边形 类似绘制直线 最后一个点会自动连接第一个点 填充颜色 可选 轮廓颜色 可选 Im.save('draw.png') from PIL import Image, ImageDraw, ImageFont Im=Image.new('RGBA', (100, 200), 'red') draw = ImageDraw.Draw(Im) # 获取一个绘图对象 arialFont = ImageFont.truetype(字体路径,字体大小) draw.text((100, 150), 'hello', fill='red', font=arialFont) # 字体位置 字体内容 字体颜色 字体样式 Im.save('text.png')
16、发送邮件
import smtplib smtp = smtplib.SMTP() smtp.connect('smtp.163.com, 25') # 链接邮件服务器 端口 smtp.login(username, password) # 登录账户 密码 smtp.sendmail(sender, receiver, msg.as_string()) # 发送者邮箱 接收者邮箱 发送内容as_string()是将msg变为str。 smtp.quit() from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.header import Header # 构造邮件对象MIMEMultipart对象 # 下面的主题,发件人,收件人,日期是显示在邮件页面上的。 msg = MIMEMultipart('mixed') msg['Subject'] = 'Python email test' msg['From'] = 'XXX@163.com <XXX@163.com>' # 收件人为多个收件人,通过join将列表转换为以;为间隔的字符串 msg['To'] = ";".join(receiver) #构造文字内容 text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.baidu.com" text_plain = MIMEText(text,'plain', 'utf-8') msg.attach(text_plain) sendimagefile=open(r'D:\pythontest\testimage.png','rb').read() # 构造图片链接 image = MIMEImage(sendimagefile) image.add_header('Content-ID','<image1>') image["Content-Disposition"] = 'attachment; filename="testimage.png"' msg.attach(image) # 构造html html = """ <html> <head></head> <body> <p>Hi!<br> How are you?<br> Here is the <a href="http://www.baidu.com">link</a> you wanted.<br> </p> </body> </html> """ text_html = MIMEText(html,'html', 'utf-8') text_html["Content-Disposition"] = 'attachment; filename="texthtml.html"' msg.attach(text_html) # 构造附件 sendfile=open(r'D:\pythontest\1111.txt','rb').read() text_att = MIMEText(sendfile, 'base64', 'utf-8') text_att["Content-Type"] = 'application/octet-stream' msg.attach(text_att) # 发送邮件 smtp = smtplib.SMTP() smtp.connect('smtp.163.com') smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit()
17、其他杂七杂八
import # 导入模块 import random random.randint(1, 10) # 生成1-10之间的随机整数 或 from random import * 或 from random import randint randint(1, 10) # 导入模块内方法, 可以直接使用方法 # 提前结束程序 import sys sys.exit(); input() # 获取用户输入值 print("what is your name?") myName = input() # 程序暂停,等待用户输入,赋值给myName print("my name is "+myName) # 输出 my name is ysgs