LearnPythonLibrary

pandas

读写{
读取 xlsx文件失败,换别的引擎
df=pandas.read_excel(‘data.xlsx’,engine=‘openpyxl’)

多Sheet写入。
{
	writer = pd.ExcelWriter("fileName.xlsx")
	df1.to_excel(writer,sheet_name = "...")
	df2.to_excel(writer,sheet_name = "...")
	writer.save()
	writer.close()
}

非常规xlsx写入  (存在特殊符号)
df.to_excel(writer, sheet_name="DutyRectDataSheet", engine='xlsxwriter')

}

获取变量名方法:
{
字典化:
abc = 376 variable_name = list(dict(abc=abc).keys())[0]
}

导入数据
{
pd.read_csv(filename)
pd.read_table(filename)
pd.read_excel(filename)
pd.read_sql(filename)
pd.read_json(filename)
pd.read_html(filename)
pd.read_clipboard(filename)
pd.DataFrame(filename)
}

导出数据
{
df.to_csv(filename)
df.to_excel(filename)
df.to_sql(filename)
df.to_json(filename)
}

查看数据
{
df.head(n) 查看DataFrame前n行
df.tail(n) 查看最后n行
df.loc(n) 查看第n行的数据
b = df.loc(n) 特定行
b.axes -> 对应的每列标签。
b.axes[0][i] -> 对应的具体标签
df.loc[:,[a,b]] 看a,b列
df.iloc[0] 看行
df.loc[0] 看行
}

数据操作

{
数据去重
根据某列数据重复来去重行
df.drop_duplicates(subset = [‘A’,‘B’],keep = ‘first’,inplace = False).reset_index()
inplace = False 生成新表 True 则在原数据上操作
reset_index() 剔除无效行

}

添加数据
{
df[“New Col”] = [Fun(i) for i in Resources]
}

筛选
{
条件筛选 df[(df[‘quantity’] > 20) | (df[‘单价’] > 100)]
特定条件筛选 df[df[‘单价’].isin[20.98,30.98]]

多值筛选 	df[df["A"].isin(Arr)]
分类
	type = df.groupby("A")
	
模糊筛选 	str.contains()   正则匹配  切片
			province = pd.DataFrame(['广东', '广西', '福建', '福建省'], columns=['省份'])
			province[province["省份"].str.contains("福")]#筛选出带广的省份数据


函数筛选  :  df[df["A"].map(lambda x:x>5)]
			  data[data["data"].map(lambda x:fun(x))]   #fun为预定义函数  

重复值筛选  : 

}

坑:
{
1. val in df[“索引”] : 就算val在df[“索引”]也会报False
正确使用方法: val in df[“索引”].values

}

Collections 库

import collections as cls

  1. Counter : 计算字符串每个字符的个数并输出字典类型
    ans = cls.counter(“asf8y1241123123”)

    ans.elements()  --->  包含所有counter的迭代器
    
    ans.most_common(n)   -> 最多的n个字符
    
  2. defaultdict
    def default_dic():
    return “default_value”

    dic = cls.defaultdict(default_dic,"a" = 123) 
    	#设置不存在的键的默认值
    
  3. Deque 双端队列

    deque = cls.deque(“”)
    #右端插入
    deque.extend(“abcde”)
    deque.append(“f”)

    #左端插入
    deque.extendleft(“ddd”)
    deque.appendleft(“c”)

    #删除
    deque.pop()
    deque.popleft()

    队列旋转
    deque.rotate(2) #所有数据右移两位,越位重置
    deque.rotate(-2)

  4. namedtuple #带名称的tuple

    Persion = cls.namedtuple(“Person”,“name age gender”)

    bob = Person(name = “Bob”, age = 30, gender = “male”)

  5. OrderedDict #有顺序的字典

requesets 库

import requesets
import json
1. 访问url获取资源  
	url =  "http://insight.sf-express.com/topt/api/monitor_cover/indicator_card"
	headers = {"Content-Type" : "application/json"}         #headers,反爬虫编码
	TraditionalData = json.dumps({"date_type":"week","start_time":start_time,"end_time":end_time,"type":"传统资源监控"})
	CloudData = json.dumps({"date_type":"week","start_time":start_time,"end_time":end_time,"type":"云资源监控"})
	
	response1 = requests.post(url,TraditionalData,headers = headers)   
	time.sleep(0.3)
	response2 =  requests.post(url,CloudData,headers = headers)   

	

获取cookies:
import os
import sqlite3
from win32.win32crypt import CryptUnprotectData

selenium库

需要安装浏览器以及对应驱动
from selenium import webdriver
wb = webdriver.Chrome(r"D:\pySelenium\chromedriver.exe")
wb.get("http://itsm-his.sf-express.com/balantflow/module/balantreport/report/showReport.do?id=483")
#可能要扫码

input1 = wb.find_element_by_name("createDateStart")
input2 = wb.find_element_by_name("createDateEnd")

input1.send_keys("2021-07-08")  #输入想要开始的时间
input2.send_keys("2021-07-21")  #输入想要的结束时间

sosuoButton = wb.find_element_by_id("btnSubmit")  #单机搜索
exportBtn = wb.find_element_by_class_name("btnExport")   #到处excel的按钮,一开始看不到
downBtn = wb.find_element_by_class_name("caret")  #下拉按钮

#先按下拉按钮---> 再按导出按钮
downBtn.click()
exportBtn.click()

文件下载成功。   

设置文件下载路径
{
	prefs = {"download.default_directory":"路径位置"}
	prefs = webdriver.ChromeOption()
	option.add_experimental_option("prefs",prefs)
	wb = webdriver.Chrome(...)
}

Web 自动化

pip install selenium

download chromedriver:http://chromedriver.storage.googleapis.com/index.html

https://www.cnblogs.com/lfri/p/10542797.html

自动化程序 --> 浏览器驱动 —> 浏览器

浏览器驱动和浏览器需要配套

  1. 打开网址
    {
    from selenium import webdriver as web
    wb = web.Chrome(r’D:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe’) #驱动地址

    wb.get(“https://baidu.com”)。
    //跳转到百度
    }

2.选择元素
{
#通过id找
element = wb.find_element_by_id(“kw”)
//百度的输入框

element = wb.find_element_by_id("su")
//"百度一下" 按钮

#根据class找
element = wb.find_elements_by_class("animal")

find_elements_by_class: 找不到返回空列表


#根据标签找
wb.find_elements_by_tag_name("span")


#通过webelement查找。
通过webelement查找找到的是该元素内部的

element = wb.find_element_by_id("kw")

element1 = element.find_elements_by_tag_name("span")

}

3.连接等待
{
#隐式等待。若没找到元素,等待半秒钟。
#直到达到超时时间10s
wb = web.Chrome(r’D:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe’) #驱动地址
wb.implicitly_wait(10)

取代time.sleep(..)

}

4.操控元素
{
获取属性

element.find_element_by_id("1")

获取某一个class的属性值srcid
element.get_attribute("srcid")

获取整个元素对应的HTML
element.get_attribute("outerHTML")

获取某个元素内部的HTML文本
element.get_attribute("innerHTML")

}

5.css表达式
{
selenium在4.0以后,废除了find_element_by_xxx的方法,替代方法如下
{
from selenium.webdriver.common.by import By
input2= wb.find_elements(By.CSS_SELECTOR,‘(CSS表达式)’)
}

1.# .className   根据class来找
wb.find_element_by_css_selector('.plant')

2.#  tag         根据tag来找
wb.find_element_by_css_selector('span')

3.#  #id         根据id来找
wb.find_element_by_css_selector('#1')


4.# 元素1>元素2       子元素
wb.find_element_by_css_selector('#ok >.plant')
查找到id为ok子元素的 class为plant的元素

5.# 元素1 元素2  (空格隔开)   后代元素
wb.find_element_by_css_selector('#ok .plant')
查找到id为ok后代元素的 class为plant的元素

6.#通用属性选择使用[]
# [herf = .. ]   
wb.find_element_by_css_selector("[herf = "http://www.miitbeian.goc.cn"]")

# 找到herf属性的
wb.find_elements_by_css_selector("[herf]")

css Selector
在浏览器中按F12开启

7.#选中ul标签-className为yw-list 并且bosszone ="antip_1"的元素
ul.yw-list[bosszone ="antip_1"]

8.#使用 , 来表示分别选中
#选中所有className = "plant" 或 className = "animal"
.plant,.animal

9.#根据次序选择  :nth-child(2)  nth-last-child(2)
#选择第二个后代节点li
.nav-mod li:nth-child(2)
#选择倒数第二个后代节点li
.nav-mod li:nth-last-child(2)

#第二个类型为span的元素
span:nth-of-type(2)

#奇数,偶数节点 nth-child(odd) nth-child(even)

10. #根据连接(兄弟关系)关系:  h3 + span (同级)
h3+span		#得到在h3后面的span元素
h3 ~ span   #h3后面所有的span

}
6.frame 切换
{
iframe frame
内部可以包含一个html文档。

切换到frame/iframe中:
wb.switch_to.frame('frame')  #内部可以嵌套cssSelector

#切换到外层
wb.switch_to.default_content()

切换到新的窗口
wb.switch_to.window(handle)

handle: wb.window_handles列表中有

exp
{
	for handle in wb.window_handles:
		wb.switch_to.window(handle):
			if "Bing" in wb.title:
				break
}

}

pyWin32 库

模拟Windows操作软件

#https://www.jb51.net/article/165080.htm

import win32api as api32
import win32gui as gui32

1.打开软件或文件:
{
32api.
ShellExecutewin32api.ShellExecute
(1,‘open’,
r’D:\work\month-9\date21-9-27\系统健康性.pdf’,
‘’,‘’,1)

{
win32api.ShellExecute()的参数主要包括:

HWND:指定父窗口句柄
Operation:指定动作, 譬如"edit",“explore”,“open”,“find”,“print”,“NULL”
FileName:指定要打开的文件或程序
Parameters:指定打开程序所需参数
Directory:缺省目录
ShowCmd:打开选项,可选值:
SW_HIDE = 0; {隐藏窗口,活动状态给令一个窗口}
SW_SHOWNORMAL = 1; {用最近的大小和位置显示窗口, 同时令其进入活动状态}
SW_NORMAL = 1; {用当前的大小和位置显示一个窗口,不改变活动窗口}
SW_SHOWMINIMIZED = 2; {最小化窗口,并将其激活}
SW_SHOWMAXIMIZED = 3; {最大化窗口,并将其激活}
SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示一个窗口,不改变活动窗口}
SW_SHOW = 5; {用当前的大小和位置显示一个窗口,令其进入活动状态}
SW_MINIMIZE = 6; {最小化窗口, 不激活}
SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}
SW_SHOWNA = 8; {用当前的大小和位置显示一个窗口,不改变活动窗口}
SW_RESTORE = 9; {同 SW_SHOWNORMAL}
SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}
SW_MAX = 10; {同 SW_SHOWNORMAL}
执行成功会返回应用程序句柄, 如果返回值 <= 32,则表示执行错误。返回值可能的错误有:

0—— {内存不足}
2—— {文件名错误}
3—— {路径名错误}
11—— {EXE 文件无效}
26—— {发生共享错误}
27—— {文件名不完全或无效}
28—— {超时}
29—— {DDE 事务失败}
30—— {正在处理其他 DDE 事务而不能完成该 DDE 事务}
31—— {没有相关联的应用程序}

}

}

2.查找窗体的句柄
para_handle = gui32.FindWindow(None,“窗口名”)

{
win32gui.FindWindow()的参数主要包括 (lpClassName=None, lpWindowName=None):
lpClassName:字符型,窗体的类名,可以在Spy++里找到
lpWindowName:字符型,窗口名,也就是标题栏上能看见的那个标题。
}

3、查找句柄的类名和标题
title = gui32.GetWindowText(66862)
classname = win32gui.GetClssName(66862)

#这样就可以得到程序的进程类名了

windows handler : 66862
title : '丰声'
classname : 'Chrome_WidgetWin_1'
  1. 调用win32gui.EnumWindows()枚举所有窗口句柄

    hWndList = []
    win32gui.EnumWindows(lambda hWnd,param.append(hWnd),hWndList)
    #hWndList 当前所有窗口的句柄列表

  2. 将指定窗体设置为最顶层并激活该窗口
    ?? 无效
    win32gui.SetForegroundWindow(para_hld)

  3. 模拟键盘输入
    win32api.keybd_event(bVk, bScan, dwFlags, dwExtraInfo)

    bVk:虚拟键码(键盘键码对照表见附录);
    bScan:硬件扫描码,一般设置为0即可;
    dwFlags:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被释放;
    dwExtraInfo:定义与击键相关的附加的32位值,一般设置为0即可。

  4. 模拟鼠标输入
    win32api.GetCursorPos() --》 #获取当前鼠标位置坐标

    #参数 tuple(x,y)
    win32api.SetCursorPos((100, 100)) --》 #将鼠标移到制定位置

    pip install pymouse
    pip install pykeyboard
    模拟键盘鼠标–>PyUser库
    from pymouse import PyMouse
    from pykeyboard import PyKeyboard

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值