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