模块(A-Z)
A
aiohttp
学习文档:aiohttp
alive_progress
学习文档:alive_progress
-
# 进度条显示工具 from alive_progress import alive_bar with alive_bar(100) as bar: for item in range(100): time.sleep(0.1) bar() # 显示进度条 """ alive_bar()内部属性 title:标题 total:总量,不知道可以使用unkown参数 bar:进度条样式 spinner:显示字符形式 unkown:样式 manual:True k force_tty=True show_bars 用处:查看bar样式 classic、classic2、smooth、blocks、bubbles、circles、hollow、squares、solid、checks、 filling show_spinners 用处:查看spinner样式 'classic', 'stars', 'twirl', 'twirls', 'horizontal', 'vertical', 'waves', 'waves2', 'waves3', 'dots', 'dots_waves', 'dots_waves2', 'it', 'ball_belt', 'balls_belt', 'triangles', 'brackets', 'bubbles', 'circles', 'squares', 'flowers', 'elements', 'loving', 'notes', 'notes2', 'arrow', 'arrows', 'arrows2', 'arrows_in', 'arrows_out', 'radioactive', 'boat', 'fish', 'fish2', 'fishes', 'crab', 'alive', 'wait', 'wait2', 'wait3', 'wait4', 'pulse' standard_bar_factory:快速定制 chars:加载进度条依次显示 borders:两头边界 background:未加载部分填充 tip:指示进度方向引导 error:发生错误时显示的信息 frame_spinner_factory:将传入的字符挨个输出 scrolling_spinner_factory:滚动播放 chars:播放的字符串 length:spinner区域宽度 blank:空白部分填充字符 bounceing_spinner_factory:弹动播放 right_chars:左边进入的字符串 length:区域长度 left_chars:右边进入的字符串 blank:空白区域填充 unkown_bar_factory:将spinner转换为能在未定义中使用的格式 title:标题 unkown:进度条显示文字 """
asynicio
学习文档:asynicio
B
BeautifulSoup
安装:pip install bs4
-
BeautifulSoup将HTML文档转为树形结构,每个节点都是一个对象,对象可分为四种:
- tag:
- name:名称
- attributes:属性
- attrs:多值属性
- text:字符串
- NavigableString
- 字符串常被包含在 tag 内,Beautiful Soup 用 NavigableString 类来包装 tag 中的字符串。但是字符串中不能包含其他 tag。
- BeautifulSoup
- 但是 BeautifulSoup 对象并不是真正的 HTM L或 XML 的 tag,它没有attribute属性,name 属性是一个值为“[document]”的特殊属性。
- Comment
- 注释
- tag:
-
from bs4 import BeautifulSoup # 解析器名称为:'html.parser'、'lxml'、['lxml','xml']、'html5lib' soup = BeautifulSoup(html,'解析器名称') # 获取head标签 soup.head # 获取head标签名称 soup.head.name # 获取id值为i1的标签名称 soup.find(id='i1').name # 返回title的内容 soup.title.string # 返回title的内容 soup.title.text soup.title.get_text() # 以字典形式返回标签的内容 soup.p.attrs # 以列表形式返回标签的值 soup.p.attrs['class'] soup.p['class'] soup.p.get('class') # 获取子节点 soup.标签.contents(返回值是一个列表) soup.标签.children(返回值是一个可迭代对象,获取实际子节点需要迭代) # 获取子孙节点 soup.标签.descendants(返回值是一个可迭代对象,获取实际子节点需要迭代) # 获取父节点 soup.标签.parent # 获取祖父节点[父节点,祖父节点,曾祖父节点] soup.标签.parents # 获取后面的兄弟节点 soup.next_sibling() # 获取后面所有的兄弟结点(返回值是一个可迭代对象) soup.next_siblings() # 获取前面的兄弟节点 soup.previous_sibling() # 获取前面所有的兄弟结点(返回值是一个可迭代对象) soup.previous_siblings() # 使用find\find_all方法 # 根据参数找出对应的标签,但只有一个符合条件的结果 # find(name,attrs,recursive,text,**kwargs) # 根据参数找出对应的标签,但只返回所以符合条件的结果 # 筛选条件介绍 """ name:标签名 attrs:属性 text:文本内容,指定文本内容筛选标签,单独使用text作为筛选条件,只返回text,一般配合其它条件使用 recursive:指定筛选是否递归,False则不查找子节点 """ # find_all(name,attrs,recursive,text,**kwargs) # 根据参数找出对应的标签,但只返回所以符合条件的结果 # 筛选条件介绍 """ name:标签名 attrs:属性 text:文本内容,指定文本内容筛选标签,单独使用text作为筛选条件,只返回text,一般配合其它条件使用 recursive:指定筛选是否递归,False则不查找子节点 """ # select筛选(CSS选择规则) """ 代表根据标签来筛选出指定标签 soup.select('标签名') 代表根据id筛选出指定标签,返回值是一个列表 soup.select('#标签名') 代表根据class筛选出指定标签,返回值是一个列表 soup.select('.标签名') 子查找 soup.select('div>span') # 所有直接在<div>元素之内的<span>元素,中间无其它元素 soup.select('div span') # 所有在<div>元素之内的<span>元素 soup.select('input[name]') # 所有名为<input>,并有一个name属性,值无所谓的元素 soup.select('input[type='button']') # 所有名为<input>,并有一个type属性,值为button的元素 嵌套select soup.select('#标签名1 .标签名2') # id=‘标签名1’下的class=‘标签名2’的标签,返回一个列表,列表内成员为bs4.element.Tag对象,获取属性、文本内容、标签名等操作可参考前面 """ # html代码自动补全 soup.pretty() # html字符串末尾缺少标签一样可以读取
C
configparser
学习文档:读写ini配置文件的详细操作
-
from configparser import ConfigParser conf=ConfigParser() conf.read(file_path) print(conf[section][option])
-
sections():返回一个包含所有章节的列表
-
has_section(section):判断章节是否存在
-
items:以元组形式返回所有选项
-
options(section):返回一个包含章节下所有选项的列表
-
has_option(option):判断某个选项是否存在
-
get、geboolean、getinit、getfloat(option):获取选项值
-
remove_section(section):删除一个章节
-
add_section(section):添加一个章节
-
remove_option(option):删除一个选项
-
set(section,option,value):添加一个选项
-
write(fp):将ConfigParser保存到文件
D
decimal
- 解决IEEE754浮点数运算产生精度问题,可以精确控制进位和舍弃问题
datetime
-
应当用datetime处理本地时间,而非time模块
-
# 将时间转为datatime对象 datatime.datatime(2023,6,14,0,0,0) # 表示一个时段(datatime对象),可以与上者相加 datatime.timedelta(days=10,hours=10,minutes=10,seconds=10)
-
unix时间原点与现在相差的秒数,UTC是较好的计时方式
-
localtime可以把unix时间戳转为与计算机时区相符合的当地时间
import time
from time import localtime,strftime
#通过time.time()获取时间原点1970年1月1日0时0分0m距现在有多少秒
sec=time.time()
#localtime将秒数转为time_struct
local_tuple=localtime(sec)
"""
%Y 带世纪的年份,例如'2014'
%y 不带世纪的年份,'00'至'99'(1970至2069)
%m 数字表示的月份, '01'至'12'
%B 完整的月份,例如'November'
%b 简写的月份,例如'Nov'
%d 一月中的第几天,'01'至'31'
%j 一年中的第几天,'001'至'366'
%w 一周中的第几天,'0'(周日)至'6'(周六)
%A 完整的周几,例如'Monday'
%a 简写的周几,例如'Mon'
%H 小时(24小时时钟),'00'至'23'
%I 小时(12小时时钟),'01'至'12'
%M 分,'00'至'59'
%S 秒,'00'至'59'
%p 'AM'或'PM'
%% 就是'%'字符
"""
time_format='%Y-%M-%d %H:%M:%S'
#strftime将time_struct转化为年月日时分秒
time_str=strftime(time_format,local_tuple)
print(time_str)
#strptime将年月日时分秒转化为time_struct
time_tuple=strptime(time_str,time_format)
#mktime将time_struct转为秒数
utc_now=mktime(time_tuple)
print(utc_now)
- 如果我们需要获取别的时区时间,可以在时间格式文件后面加上时区缩写
time_format='%Y-%M-%d %H:%M:%S'
depart_sfo='2023-05-15 9:38:50 PDT'
time_tuple=strptime(depart_sfo,time_format)
time_str=strftime(time_format,time_tuple)
print(time_str)
- total_seconds(timedelta对象):返回timedelta一共有多少秒
E
F
fake-useragent
-
from fake_useragent import UserAgent ua = UserAgent() # f print(ua.ie) print(ua.msie) print(ua['Internet Explorer']) print(ua.opera) print(ua.chrome) print(ua.google) print(ua['google chrome']) print(ua.firefox) print(ua.ff) print(ua.safari) print(ua.random)
faker
fake=Faker()
方法:
from faker import Faker # 1
fake = Faker() # 2
fake.name() # 3
# Donna Kelly
fake.address() # 4
# 519 Donna River
# Port Natalie, SD 87384
1. 从faker模块导入Faker这个类。
2. 实例化,保存到变量fake中。
3. 调用name()方法随机生成一个名字。
4. 调用address()方法随机生成地址信息。
如果要生成中文的随机数据,我们可以在实例化时给locale参数传入‘zh_CN’这个值:
from faker import Faker
fake = Faker(locale='zh_CN')
fake.name()
# 庞超
fake.address()
# 河北省辛集县合川张街p座 489476
如果要生成中文繁体字,则可以传入中国台湾这个地区的值'zh_TW'(当然地址显示的是台湾的):
from faker import Faker
fake = Faker(locale='zh_TW')
fake.name()
# 羅婉婷
fake.address()
# 16934 大里縣水源巷35號之0
如果要生成其他语种或地区的数据,我们可以传入相应的地区值:
ar_EG - Arabic (Egypt)
ar_PS - Arabic (Palestine)
ar_SA - Arabic (Saudi Arabia)
bg_BG - Bulgarian
bs_BA - Bosnian
cs_CZ - Czech
de_DE - German
dk_DK - Danish
el_GR - Greek
en_AU - English (Australia)
en_CA - English (Canada)
en_GB - English (Great Britain)
en_NZ - English (New Zealand)
en_US - English (United States)
es_ES - Spanish (Spain)
es_MX - Spanish (Mexico)
et_EE - Estonian
fa_IR - Persian (Iran)
fi_FI - Finnish
fr_FR - French
hi_IN - Hindi
hr_HR - Croatian
hu_HU - Hungarian
hy_AM - Armenian
it_IT - Italian
ja_JP - Japanese
ka_GE - Georgian (Georgia)
ko_KR - Korean
lt_LT - Lithuanian
lv_LV - Latvian
ne_NP - Nepali
nl_NL - Dutch (Netherlands)
no_NO - Norwegian
pl_PL - Polish
pt_BR - Portuguese (Brazil)
pt_PT - Portuguese (Portugal)
ro_RO - Romanian
ru_RU - Russian
sl_SI - Slovene
sv_SE - Swedish
tr_TR - Turkish
uk_UA - Ukrainian
zh_CN - Chinese (China Mainland)
zh_TW - Chinese (China Taiwan)
其他方法
注:个别方法具有针对性,比如province()方法适用中国,但不适用美国及其他一些国家。
fake.address() # 地址
# '香港特别行政区大冶县上街钟街k座 664713'
fake.building_number() # 楼名
# 'v座'
fake.city() # 完整城市名
# '长春县'
fake.city_name() # 城市名字(不带市县)
# '梧州'
fake.city_suffix() # 城市后缀名
# '市'
fake.country() # 国家名称
# '厄立特里亚'
fake.country_code(representation="alpha-2")
# 'BZ' # 国家编号
fake.district() # 地区
# '沙湾'
fake.postcode() # 邮编
# '332991'
fake.province() # 省
# '河北省'
fake.street_address() # 街道地址
# '武汉街D座'
fake.street_name() # 街道名称
# '广州路'
fake.street_suffix() # 街道后缀名
# '路'
汽车相关
fake.license_plate() # 牌照
# 'ZCO 000'
银行相关
fake.bank_country() # 银行所属国家
# 'GB'
fake.bban() # 基本银行账号
# 'TPET9323218579379'
fake.iban() # 国际银行代码
# 'GB82IRVM1531009974701'
条形码相关
fake.ean(length=13) # EAN条形码
# '5456457843465'
fake.ean13() # EAN13条形码
# '2689789887590'
fake.ean8() # EAN8条形码
# '52227936'
颜色相关
fake.color_name() # 颜色名称
# 'Orange'
fake.hex_color() # 颜色十六进制值
# '#a5cb7c'
fake.rgb_color() # 颜色RGB值
# '15,245,42'
fake.rgb_css_color() # CSS颜色值
# 'rgb(15,70,13)'
fake.safe_color_name() # 安全色
# 'aqua'
fake.safe_hex_color() # 安全色十六进制值
# '#881100'
公司相关
fake.bs() # 商业用词
# 'synthesize strategic vortals'
fake.catch_phrase() # 妙句(口号)
# 'Robust even-keeled service-desk'
fake.company() # 公司名称
# '富罳科技有限公司'
fake.company_prefix() # 公司名称前缀
# '商软冠联'
fake.company_suffix() # 公司名称后缀
# '网络有限公司'
信用卡相关
fake.credit_card_expire(start="now", end="+10y", date_format="%m/%y") # 过期年月
# '11/20'
fake.credit_card_full(card_type=None) # 完整信用卡信息
# 'VISA 16 digit\n秀珍 卢\n4653084445257690 11/19\nCVC: 935\n'
fake.credit_card_number(card_type=None) # 信用卡卡号
# '4339481813664365360'
fake.credit_card_provider(card_type=None) # 信用卡提供商
# 'VISA 19 digit'
fake.credit_card_security_code(card_type=None) # 信用卡安全码
# '597'
货币相关
fake.cryptocurrency() # 加密货币代码+名称
# ('TRX', 'TRON')
fake.cryptocurrency_code() # 加密货币代码
# 'MZC'
fake.cryptocurrency_name() # 加密货币名称
# 'Ripple'
fake.currency() # 货币代码+名称
# ('GNF', 'Guinean franc')
fake.currency_code() # 货币代码
# 'SOS'
fake.currency_name() # 货币名称
# 'Lebanese pound'
时间相关
fake.am_pm() # AM或PM
# 'PM'
fake.century() # 世纪
# 'XII'
fake.date(pattern="%Y-%m-%d", end_datetime=None) # 日期字符串(可设置格式和最大日期)
# '1998-05-13'
fake.date_between(start_date="-30y", end_date="today") # 日期(可设置限定范围)
# datetime.date(2014, 8, 17)
fake.date_between_dates(date_start=None, date_end=None) # 同上
# datetime.date(2019, 10, 14)
fake.date_object(end_datetime=None) # 日期(可设置最大日期)
# datetime.date(1981, 12, 20)
fake.date_of_birth(tzinfo=None, minimum_age=0, maximum_age=115) # 出生日期
# datetime.date(1931, 12, 8)
fake.date_this_century(before_today=True, after_today=False) # 本世纪日期
# datetime.date(2003, 5, 4)
fake.date_this_decade(before_today=True, after_today=False) # 本年代中的日期
# datetime.date(2014, 1, 29)
fake.date_this_month(before_today=True, after_today=False) # 本月中的日期
# datetime.date(2019, 10, 10)
fake.date_this_year(before_today=True, after_today=False) # 本年中的日期
# datetime.date(2019, 3, 6)
fake.date_time(tzinfo=None, end_datetime=None) # 日期和时间
# datetime.datetime(1990, 8, 11, 22, 25)
fake.date_time_ad(tzinfo=None, end_datetime=None, start_datetime=None) # 日期和时间(从001年1月1日到现在)
# datetime.datetime(244, 12, 17, 9, 59, 56)
fake.date_time_between(start_date="-30y", end_date="now", tzinfo=None) # 日期时间(可设置限定范围)
# datetime.datetime(1995, 4, 19, 17, 23, 51)
fake.date_time_between_dates(datetime_start=None, datetime_end=None, tzinfo=None) # 同上
# datetime.datetime(2019, 10, 14, 14, 15, 36)
fake.date_time_this_century(before_now=True, after_now=False, tzinfo=None) # 本世纪中的日期和时间
# datetime.datetime(2009, 8, 26, 18, 27, 9)
fake.date_time_this_decade(before_now=True, after_now=False, tzinfo=None) # 本年代中的日期和时间
# datetime.datetime(2019, 2, 24, 22, 18, 44)
fake.date_time_this_month(before_now=True, after_now=False, tzinfo=None) # 本月中的日期和时间
# datetime.datetime(2019, 10, 3, 9, 20, 44)
fake.date_time_this_year(before_now=True, after_now=False, tzinfo=None) # 本年中的日期和时间
# datetime.datetime(2019, 2, 10, 7, 3, 18)
fake.day_of_month() # 几号
# '23'
fake.day_of_week() # 星期几
# 'Tuesday'
fake.future_date(end_date="+30d", tzinfo=None) # 未来日期
# datetime.date(2019, 10, 28)
fake.future_datetime(end_date="+30d", tzinfo=None) # 未来日期和时间
# datetime.datetime(2019, 10, 28, 21, 4, 35)
fake.iso8601(tzinfo=None, end_datetime=None) # iso8601格式日期和时间
# '1995-04-10T00:45:01'
fake.month() # 第几月
# '07'
fake.month_name() # 月份名称
# 'December'
fake.past_date(start_date="-30d", tzinfo=None) # 过去日期
# datetime.date(2019, 10, 3)
fake.past_datetime(start_date="-30d", tzinfo=None) # 过去日期和时间
# datetime.datetime(2019, 9, 30, 20, 25, 43)
fake.time(pattern="%H:%M:%S", end_datetime=None) # 时间(可设置格式和最大日期时间)
# '14:26:44'
fake.time_delta(end_datetime=None) # 时间间隔
# datetime.timedelta(0)
fake.time_object(end_datetime=None) # 时间(可设置最大日期时间)
# datetime.time(4, 41, 39)
fake.time_series(start_date="-30d", end_date="now", precision=None, distrib=None, tzinfo=None)
# <generator object Provider.time_series at 0x7fadf51e0930>
fake.timezone() # 时区
# 'Asia/Baku'
fake.unix_time(end_datetime=None, start_datetime=None) # UNIX时间戳
# 393980728
fake.year() # 某年
# '2016'
文件相关
fake.file_extension(category=None) # 文件扩展名
# 'avi'
fake.file_name(category=None, extension=None) # 文件名
# '专业.pptx'
fake.file_path(depth=1, category=None, extension=None) # 文件路径
# '/的话/以上.ods'
fake.mime_type(category=None) # MIME类型
# 'application/xop+xml'
fake.unix_device(prefix=None) # UNIX设备
# '/dev/xvdq'
fake.unix_partition(prefix=None) # UNIX分区
# '/dev/xvdc6'
坐标相关
fake.coordinate(center=None, radius=0.001) # 坐标
# Decimal('147.543284')
fake.latitude() # 纬度
# Decimal('66.519139')
fake.latlng() # 经纬度
# (Decimal('55.3370965'), Decimal('-15.427896'))
fake.local_latlng(country_code="US", coords_only=False) # 返回某个国家某地的经纬度
# ('25.67927', '-80.31727', 'Kendall', 'US', 'America/New_York')
fake.location_on_land(coords_only=False) # 返回地球上某个位置的经纬度
# ('42.50729', '1.53414', 'les Escaldes', 'AD', 'Europe/Andorra')
fake.longitude() # 经度
# Decimal('70.815233')
网络相关
fake.ascii_company_email(*args, **kwargs) # 企业邮箱(ascii编码)
# 'qiuyan@xiulan.cn'
fake.ascii_email(*args, **kwargs) # 企业邮箱+免费邮箱(ascii编码)
# 'lei59@78.net'
fake.ascii_free_email(*args, **kwargs) # 免费邮箱(ascii编码)
# 'pcheng@gmail.com'
fake.ascii_safe_email(*args, **kwargs) # 安全邮箱(ascii编码)
# 'fangyan@example.org'
fake.company_email(*args, **kwargs) # 企业邮箱
# 'scao@pingjing.net'
fake.domain_name(levels=1) # 域名
# 'dy.cn'
fake.domain_word(*args, **kwargs) # 二级域名
# 'gangxiuying'
fake.email(*args, **kwargs) # 企业邮箱+免费邮箱
# 'na13@ding.cn'
fake.free_email(*args, **kwargs) # 免费邮箱
# 'fang48@hotmail.com'
fake.free_email_domain(*args, **kwargs) # 免费邮箱域名
# 'yahoo.com'
fake.hostname(*args, **kwargs) # 主机名
# 'lt-70.53.cn'
fake.image_url(width=None, height=None) # 图片URL
# 'https://placekitten.com/752/243'
fake.ipv4(network=False, address_class=None, private=None) # ipv4
# '160.152.149.78'
fake.ipv4_network_class() # ipv4网络等级
# 'b'
fake.ipv4_private(network=False, address_class=None) # 私有ipv4
# '10.99.124.57'
fake.ipv4_public(network=False, address_class=None) # 公共ipv4
# '169.120.29.235'
fake.ipv6(network=False) # ipv6
# 'f392:573f:d60f:9aed:2a4c:36d7:fe5b:7034'
fake.mac_address() # MAC地址
# '62:67:79:8c:c2:40'
fake.safe_email(*args, **kwargs) # 安全邮箱
# 'jing58@example.org'
fake.slug(*args, **kwargs) # URL中的slug
# ''
fake.tld() # 顶级域名
# 'cn'
fake.uri() # URI
# 'http://yi.com/list/main/explore/register.php'
fake.uri_extension() # URI扩展
# '.php'
fake.uri_page() # URI页
# 'terms'
fake.uri_path(deep=None) # URI路径
# 'blog/tags/blog'
fake.url(schemes=None) # URL
# 'http://liutao.cn/'
fake.user_name(*args, **kwargs) # 用户名
# 'xiulan80'
图书相关
fake.isbn10(separator="-") # ISBN-10图书编号
# '0-588-73943-X'
fake.isbn13(separator="-") # ISBN-13图书编号
# '978-1-116-51399-8'
职位相关
fake.job() # 职位
# '法务助理'
文本相关
fake.paragraph(nb_sentences=3, variable_nb_sentences=True, ext_word_list=None) # 单个段落
# '最新事情生产.方面解决名称责任而且.类型其实内容发生电脑.音乐具有今年是一.'
fake.paragraphs(nb=3, ext_word_list=None) # 多个段落
# ['使用评论管理.没有广告工作评论是否.', '帖子而且专业.这些比较完全发现准备设计工具.', '完成详细发生空间汽车.新闻电影您的游戏这种操作网站知道.']
fake.sentence(nb_words=6, variable_nb_words=True, ext_word_list=None) # 单个句子
# '直接这样点击单位对于时候.'
fake.sentences(nb=3, ext_word_list=None) # 多个句子
# ['电话国际项目管理.', '软件之后提高一样次数电影规定.', '东西会员发展什么不断经济.']
fake.text(max_nb_chars=200, ext_word_list=None) # 单个文本
# ('资源信息得到因此开发资源资料.\n'
# '国家这样等级需要用户如此.电话非常一切游戏所以学校类型.不要正在如果来源认为投资在线.\n'
# '这些更新密码其中起来实现有些.以上事情重要通过.\n'
# '但是就是介绍最大深圳简介设计.历史这种可以出现中心社区.\n'
# '政府当然包括简介全国内容生活.有些地址以上.回复这些来自搜索现在不断经营不断.\n'
# '操作为什孩子报告东西拥有如此.相关特别业务日本这种.合作问题准备比较谢谢.')
fake.texts(nb_texts=3, max_nb_chars=200, ext_word_list=None) # 多个文本
# [ '地址控制无法正在必须中心积分一些.支持制作安全.\n'
# '比较最新最大她的功能能够是一.主题选择当前显示.\n'
# '的话社会现在地区阅读继续所有.美国数据正在深圳不能.\n'
# '能够查看其中生活商品.谢谢认为之后以及以下之后这里.\n'
# '活动支持人民这么今年.要求包括生活运行技术社会.\n'
# '当前更多游戏.下载一点开发论坛法律为了美国.\n'
# '如何更新个人谢谢作为还有论坛.销售销售法律学生这么责任一些.',
# '日本最大方法活动主题到了结果.教育还有孩子觉得简介出现国际.东西国家图片威望品牌.\n'
# '那些会员现在准备可能.威望部分文件主题东西业务一切之间.所以必须当前方法.\n'
# '等级大小重要可能下载孩子.来源感觉业务文件以后深圳学校.网络什么新闻都是安全.\n'
# '资料重要成功谢谢时候音乐安全相关.电脑系列日期.工具使用搜索来源首页.\n'
# '直接企业影响大小什么.相关品牌选择她的规定来源推荐.',
# '中文文化数据内容系统.他们这些之间深圳.\n'
# '联系城市出现部分都是政府生活.社会同时人民市场现在决定需要.其他政府简介深圳教育加入对于.\n'
# '运行是一语言安全通过大小学生.商品然后信息由于虽然.\n'
# '因为关于选择希望行业具有深圳.出现价格那么下载提高知道人员.设备直接显示事情帖子正在两个关于.\n'
# '系列公司大家.论坛所以完全文章标准.活动中国工具电脑.\n'
# '主题作者不能.进行国家系统地区增加.经验质量价格我的.']
fake.word(ext_word_list=None) # 单个词语
# '新闻'
fake.words(nb=3, ext_word_list=None, unique=False) # 多个词语
# ['选择', '历史', '规定']
编码相关
fake.binary(length=1048576) # 二进制
# (b'\xbf\xce\x01Y:\xf7\xf4\xe0G]\x94*Rb\x9f\x85\xb6\xcd\x83\x15\t\xbc\x16\x8d'
# b'\xcb\n\x90\x10S\x1e85\x91\xae\x06\xbdq.\xf6c\x1f\xfd\x94=\\\xf9_\xc2'
# b't\xe0{\x15\xd9\x8fW7\xe5[\x0b\x84\xd2\x94\xf4\xd91\xd2\x91\x01\xb5\xeej\x84'
# b'*\x81\x96\xa7\xa9\xda\x1f\xee\x9a\xb0\x1d\xef\xad\x92\x1c\x0f\xa0U6\xaf'
# b'x5\x9f\x93\\b \xf7kq\xfe\x97(\xe0Q\x89*\xbb\x8b\x9a\x14\xd2\xfe\x07'
# b'\xfe\xcfYy\x16\x12\xef\xe3\xd9%\x95\\\x80O\xec\x9f\xf7\x88\xfal'
# b'\x11\x93\x94\xb1\xd9\xf6b\xf0\x7f\xa2\x95\x93[\x98\xf3\xe0$\xdd\xe0D'
# b'\xde\x8c\xe3\xe0\xc0f\xab\x1c\xf6\xdf]\xbe8U\x11\xc7\xce\xf6f\xc9'
# b'1\xa6\xda\x85\xe6.\xda\xd1_\x8a\xbe\x05\xbf\xf4*x [\xb9\xc3\xbb\x99\xa1\xbe'
# b'GT\xb75\x96\x8a\x9a:`o\x1bm\xe9KzT\x0c\xdc\xb1\xe7ssiN\xcb2\x8eY'
# b'\xd1\xb4\x8c+\xe9\xc1Ph\x0fD\x0f\xd5}\n/K$\x85J\xaf\x1d\xb2\xd0R\xa7n0l'
# b'\xafQ\x91\x95\xac]a\xe1\x8f\x1f\x9e`e\xd2\x1f\xaa\xeb\xf3[}(\xd60\x01'
# b'Y\r\xe2XCW\xba\xa3\xad\xe4OP\x891=\xff\xae\xb9\x9d\xa2!\xfa2\r\x81\xfat\xfb'
# b'3t%\xd5\x11B\x94Os\x8d\xc5\xae%\xa6\x93}[p\x02\xd7\xba\xa4\xf0?R\xbb\xf6\xb1'
# b'h\x12J\x05\xce\xf9\xcd\xc6\xa7\xed\x80\x9e\x9e\xf8q]\xab\x9a\xd7\xd6'
# b'\xad\xecK\x1d=\xb0?\xb2\x83\t<\xb2ZGl\x9f\x8dmI\x1d\xf1jh\xd3s\x9d\xd6\xf9'
# b'\x8e\xbfs\xa9_\xe0\xaf\x86O\xde|\x17\xb5\x8b\xe4:Z\xa1\x01f\xc9l[Z'
# b'\xb4\x7fS\x0f7\x9c\x9d\xdd\xd3PY\x86\xf4\xec\xcb\x87\x05\xafU-\xaebY~'
# b"\x9f\xec\xf6\x9c\x84\x99'S\xd4\t.\xd0x\xbb\x01<&\xdd\xfc6M\xa9|R"
# b'\xec\xf9b\xcdz\x9a\x97p\xb5\xb6\x13\xd9\xab\x91C\xe4\x95\xc9\x18\xaeAi\\N'
# b"#\x99\t+Z\xd2\xf1\x89\xa0L\x04\xef\xaf<\xc4\xfbO\xcd\x83\xd4\x17'C\x10"
# b'\x0b\xd6\xb5Cv\x98}E\xc9;\xbf\x05\xab\xc7 W\xa8\xbcmX\x06\x865\xbe\\f\xedc'
# b'\xacb\xc8\x84\xc0KI\xd5\xea\x888\x93^\xfcE\xee,^(\x97g\xd17\xcd8\xabU\x95'
# b'\x17~]\x08\x11\xa4\xbf\xed\xf3\xabm\x15l\xde\xf5\x06c\xe1\xad+'
# b'\xed\xd1\xa5\xda\x15\xbax\xac}\x8e\xd7\x8831\x04\xb3\xae\xc7\xb4\x04'
# b'y\xda!\xeb\x1e\xcd\n+\x94#4\xe51\xc8\xe9t\n.:\xfd\xcfc\x1a\xcf\x99VY\x11'
# b'Y\x1bF\xe9\x9e\xebK\x86WD\x80\x12\xf1\x11z\xf6\xe3vV4\xbcB\n^k(\x1aw'
# b'<\xfd\x95z\t\xf7\xaa_F%n\xc4\xeb\x94\xcd\x80\xffh\xbe{^\x04\xe3\xe7'
# b'\xab\xa3\xd9\x037\x86\xde~J\x15th\x98_\xda\xe25\xeaO\xc8\x15\xae\xd7\xa9'
# b'\x80\x9as\xef<FU\xb2\x10\x7fN\x05\x8dd_\xef\x0bQO-\x9diW\xdc\xcdV\xbe*'
# b'\x13\xa7$\x08\xe4\xb8\x96bd\xcf\xe7\xd6h\xe9.{Z:S\xef\xc4\x14R\x91'
# b"\xce\xd3\xcd\xe3\xbc\x9f!Y\x05A\xa00\x11\xca\xaa\xeb\xc4')\xb3\xdcF\x8e\xfa"
# b'\xbd\x9b:\xae\x1f\xbe<7]\x93E\xc2\x1b\x17\xc95x\x8f\x88|\xb8^\xea\x06'
# b'(\x9d\xc5\xeb\x8a|\x9f\x05\x83\xfe\xf5KsUy\xdc\xd1S\x96\xda\xc5q\xc4\xfd'
# b'\xeb\xc4"\x14Y\x1cU\x99\xe8\x11r\x04\x941\xa1\xac^c\xbbG\xc4\xd8\xb70'
# b'\xadX\x98\xad\xf8\xc1\x11\x10\xbc\x00\x80\x84\x05\x07b\x8c0\x93\xe6\xd8'
# b'\xe2I\xea\xecm+-\x8aY\xb8F\x0e\x19#zH{/\xcb\x88\xac\xa9\xfe\x84cH[_'
# b'0d\xc6\xc4\x0b\r\x9ef\n\xb3\x97d\xb4;\xf1\x014kv\xd9h\xad\x18/\xe6\xf1r\xa1'
# b'3\x9cz\xf7\x90\r\xaf\xed\x85\x07\x80\xbb\xc2\x82\xe4\xcc\x91\xc8\xdf\x9a'
# b'`St\xd8\x98\xbb\xac\xe9\x93\xe0*\xd7\x9b/)\x93\x08\xc1\x0cxhD\xd2\xf1'
# b'\xbe5\xe1\x1f:\x04\x07\xf1\xb4\xaeJ\xe2\xe0[\x9e\xa4\x9b\xed)\xbf\xc2}+\x88'
# b'\x08I^f\x82-\xa2o\xb2\xc3\x85\xc5;Z\x13B\xf76~\x9af\xf7\xa9\x1a\xa4\xd4\xb8b')
fake.boolean(chance_of_getting_true=50) # 布尔值
# True
fake.md5(raw_output=False) # Md5
# '0712ca7a3be00aa01c823de37dc61230'
fake.null_boolean() # NULL+布尔值
# True
fake.password(length=10, special_chars=True, digits=True, upper_case=True, lower_case=True) # 密码
# '^7cSoHR1^r'
fake.sha1(raw_output=False) # SHA1
# 'f89f039d9fc00860651d9a567ac27990ae609445'
fake.sha256(raw_output=False) # SHA256
# '675a85aa0d29583200f75351e35b4af0335af835fc617382cbd9fece258b6520'
fake.uuid4(cast_to=<class 'str'>) # UUID4
# '0d7be36a-febd-4f9f-bf1e-791c0ee1227b'
人物相关
fake.first_name() # 名字
# '强'
fake.first_name_female() # 名字(女)
# '桂荣'
fake.first_name_male() # 名字(男)
# '志强'
fake.first_romanized_name() # 名字(罗马文)
# 'Chao'
fake.last_name() # 姓
# '宋'
fake.last_name_female() # 姓(女)
# '陆'
fake.last_name_male() # 姓(男)
# '曾'
fake.last_romanized_name() # 姓(罗马文)
# 'Xie'
fake.name() # 姓名
# '王凯'
fake.name_female() # 姓名(女)
# '戴丽丽'
fake.name_male() # 姓名(男)
# '刘荣'
fake.prefix() # 称谓
# ''
fake.prefix_female() # 称谓(女)
# ''
fake.prefix_male() # 称谓(男)
# ''
fake.romanized_name() # 称谓(罗马文)
# 'Guiying Chang'
fake.suffix() # 姓名后缀(中文不适用)
# ''
fake.suffix_female()
# ''
fake.suffix_male()
# ''
电话相关
fake.msisdn() # 完整手机号码(加了国家和国内区号)
# '9067936325890'
fake.phone_number() # 手机号
# '18520149907'
fake.phonenumber_prefix() # 区号
# 145
档案相关
fake.profile(fields=None, sex=None) # 档案(完整)
# { 'address': '河南省昆明市清河哈尔滨路H座 496152',
# 'birthdate': datetime.date(2014, 11, 20),
# 'blood_group': 'AB+',
# 'company': '易动力信息有限公司',
# 'current_location': (Decimal('77.504143'), Decimal('-167.365806')),
# 'job': '培训策划',
# 'mail': 'liangyang@yahoo.com',
# 'name': '杨磊',
# 'residence': '澳门特别行政区台北县西夏兴城街L座 803680',
# 'sex': 'F',
# 'ssn': '140722200004166520',
# 'username': 'lei65',
# 'website': [ 'http://www.29.cn/',
# 'http://www.lei.cn/',
# 'http://lishao.net/',
# 'https://www.feng.net/']}
fake.simple_profile(sex=None) # 档案(简单)
# { 'address': '广西壮族自治区南宁市花溪孙街c座 653694',
# 'birthdate': datetime.date(1993, 12, 16),
# 'mail': 'haomin@yahoo.com',
# 'name': '任秀英',
# 'sex': 'F',
# 'username': 'iding'}
Python相关
fake.pybool() # Python布尔值
# False
fake.pydecimal(left_digits=None, right_digits=None, positive=False, min_value=None, max_value=None) # Python十进制数
# Decimal('-837022273798.0')
fake.pydict(nb_elements=10, variable_nb_elements=True, *value_types) # Python字典
# { '一种': 6381,
# '可以': -9242847.69292,
# '地址': 9668,
# '拥有': 'jVBverSGAJvHsrcZPFDg',
# '控制': Decimal('-98521.0'),
# '本站': datetime.datetime(1983, 5, 30, 22, 51, 22),
# '来源': 'MRTmgbdlwNlqHiIDUVTN',
# '标题': 929,
# '注册': 'QvYtlygVIopYPasYHCQr',
# '解决': -7138575.3,
# '问题': 1115.0}
fake.pyfloat(left_digits=None, right_digits=None, positive=False, min_value=None, max_value=None) # Python浮点数
# 6.7442382094132
fake.pyint(min_value=0, max_value=9999, step=1) # Python整型值
# 8326
fake.pyiterable(nb_elements=10, variable_nb_elements=True, *value_types) # Python可迭代对象
# {'gang42@gmail.com', Decimal('-638462592926556.0'), 5383, 1608, 185608.962728, datetime.datetime(2013, 8, 7, 10, 44, 51), 'xvqHfWdLyTkaFoguvnqd', datetime.datetime(1999, 9, 10, 4, 41, 29), Decimal('4627589014.65023'), 'http://57.cn/category/', 'UZJwIrsLowvwVGAChwzB', Decimal('68.623476938'), 'mtUbDpTHnQAPVjXzknIM'}
fake.pylist(nb_elements=10, variable_nb_elements=True, *value_types) # Python列表
# [ 589,
# 'https://www.yangbai.cn/main/',
# 'http://fang.cn/faq/',
# 'HvtSTwWqDtughQLYibOd',
# Decimal('-3541501.934427'),
# 2758,
# datetime.datetime(2018, 2, 22, 9, 51, 8),
# 5375,
# 'UVXMfCqJyZwBkfgGhQiH',
# 'HfxybvRTPwaFmuhwvKLT',
# Decimal('-21565647052012.8'),
# 'wEqWsXKTputijSMWhCIb']
fake.pyset(nb_elements=10, variable_nb_elements=True, *value_types) # Python集合
# {7105, 'sidMFYVhXjkNZnHHimJJ', 'yexiuying@kw.cn', 'GPxoyEYixUGAoRCiEmDe', datetime.datetime(2001, 6, 17, 12, 49, 57), 'vOsPAdmmCmkJxeBUpBJP', -75011.0}
fake.pystr(min_chars=None, max_chars=20) # Python字符串
# 'NOlWELuogcxSfRjYauSV'
fake.pystruct(count=10, *value_types) # Python结构
# ( [ 'SQeHWPNdooccsfbZslee',
# 'nDXibfaPXSpmIpxtDUWP',
# 'DrZHepzMfNPRrxgcXwvR',
# 988.956374402,
# 7239,
# 4885,
# datetime.datetime(1972, 6, 13, 14, 18, 11),
# -582284.9732,
# datetime.datetime(1997, 8, 23, 9, 19, 6),
# 'http://www.hu.cn/homepage.php'],
# { '一般': 'oqUQKBhqNylyofEditXs',
# '不要': 'qTlztJembuRZHFEzZnGO',
# '价格': -2100690667.387,
# '国内': datetime.datetime(1989, 9, 3, 11, 27, 11),
# '密码': 'aWaufuJAzfgeuhyXAwDL',
# '开发': 'aJvNisEMynJcAPhbNAHa',
# '方法': 'WVEqHUnnkpUbAnllUqKL',
# '汽车': 'bfQlaULiNfjgkrqQUCnL',
# '用户': 'WDYNlInLyCcIXMFgyLDS',
# '那个': 'qWivpUnOcTwGDhOXihOb'},
# { '个人': { 1: 'http://www.ik.cn/categories/tags/search/homepage/',
# 2: [ 'gBSKOBAYYlPwILaWgory',
# 'xoeueUWWgbvNHDxKYASD',
# 'nkcelmDSpqiQasuKvNZg'],
# 3: { 1: 2000,
# 2: 'SeDZKUpCxrCLlrDIlPxV',
# 3: [Decimal('7833105.737'), Decimal('-7.994')]}},
# '帖子': { 0: 'HXTKojcilYqgYmFUMjuk',
# 1: [6887, 3635, 'http://hezhu.com/list/main/terms.html'],
# 2: { 0: 'hkong@fujiang.cn',
# 1: 4676,
# 2: ['JYEFavcRqcsdpnSMwENU', 'vxu@gmail.com']}},
# '应该': { 7: 'EmzzdZrmUpIetxPktXAU',
# 8: [ Decimal('4786692875733.0'),
# datetime.datetime(2016, 10, 11, 10, 38, 20),
# 'ghtelDQAsBeYDaokgbYg'],
# 9: { 7: 'yanding@yahoo.com',
# 8: 'dtjdazSyZCStWkVYwIvK',
# 9: ['TPTzKNGReDCJmrfTkKmd', 'TKQmVfrNRioICuqCrrDQ']}},
# '我的': { 3: 'http://17.cn/home/',
# 4: [ 'https://www.guiyingsu.cn/category/',
# 'gweRIERFoojbKxRiiliG',
# 'dMjUNjDRCSpdrNAlHXRp'],
# 5: { 3: 'YeIsIoVHcIgAQWYZkQiR',
# 4: 'hGDzyNMVafuDMXSbbhzY',
# 5: [977, 'xCFBFdaPHNyFscSCqEWd']}},
# '或者': { 9: 'owgjdYQvTWZIZRewhkev',
# 10: ['nHusiXLRunAMvynwjJgu', 6500, 'cQRHfcdFJGUyPDlIocqG'],
# 11: { 9: 'sETogfbiwRIqFlrGXeiT',
# 10: 'tliang@kong.cn',
# 11: [ 'https://chaohao.cn/register.html',
# 'fang21@yahoo.com']}},
# '技术': { 4: 8843,
# 5: [-5660697068472.0, 7952, -52210308185.53],
# 6: { 4: 6477,
# 5: 8669,
# 6: ['sGueDRKWFAtTExnruySP', 'YZcIHHkbDRLUgeHhblCu']}},
# '深圳': { 5: 2532,
# 6: [ Decimal('66661967013036.0'),
# 'lei14@yahoo.com',
# 'https://www.fangyao.cn/categories/search.html'],
# 7: { 5: datetime.datetime(1988, 9, 11, 2, 30, 1),
# 6: 50.1,
# 7: [ 'https://www.gang.cn/',
# 'http://www.liao.cn/posts/app/main.html']}},
# '生产': { 2: 2187,
# 3: [ 8629589.339,
# 'QvftOABFsahZurjYIPTr',
# 'GumqSZMuOSIfrUzjTzKO'],
# 4: { 2: 1982,
# 3: 'WatxfisQAelRTuwopoOA',
# 4: ['xiacheng@00.cn', 'flrVEiuWlEnJjbxCazQG']}},
# '起来': { 6: 'luming@yahoo.com',
# 7: [ 'http://www.yu.cn/home.php',
# 'vvmhckwxQGnMCafhjXIA',
# Decimal('-511928454.48')],
# 8: { 6: 'https://www.naguiying.cn/',
# 7: 279.928,
# 8: [5034, 'shaochao@17.cn']}},
# '那么': { 8: 'PNrBODNdjLnhalWpVMXk',
# 9: [ datetime.datetime(1973, 7, 4, 11, 42, 8),
# 'iye@gmail.com',
# 'iEPyTnfNhNhWWXbkStQC'],
# 10: { 8: Decimal('-227034846260.0'),
# 9: Decimal('616424892362.0'),
# 10: [ 'AjpDMNozhUbedUuOZWdL',
# datetime.datetime(1972, 10, 27, 8, 36, 39)]}}})
fake.pytuple(nb_elements=10, variable_nb_elements=True, *value_types) # Python元组
# ( Decimal('989085669.60574'),
# 'yang44@hotmail.com',
# 794,
# datetime.datetime(1989, 12, 11, 4, 10, 40),
# 234,
# 'TyEwXywfUShjlUVwtMAk',
# 'NLUdMSRYoBHmGGPhbwor',
# -69.356824324)
身份证相关
fake.ssn(min_age=18, max_age=90) # 身份证
# '410622198603154708'
用户代理相关
fake.android_platform_token() # 安卓
# 'Android 5.0.1'
fake.chrome(version_from=13, version_to=63, build_from=800, build_to=899) # Chrome
# ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_10_9) AppleWebKit/534.0 (KHTML, '
# 'like Gecko) Chrome/62.0.826.0 Safari/534.0')
fake.firefox() # FireFox
# ('Mozilla/5.0 (Windows NT 5.1; cs-CZ; rv:1.9.0.20) Gecko/2010-12-02 06:14:30 '
# 'Firefox/3.6.5')
fake.internet_explorer() # Ie
# 'Mozilla/5.0 (compatible; MSIE 7.0; Windows 95; Trident/3.0)'
fake.ios_platform_token() # ios
# 'iPhone; CPU iPhone OS 5_1_1 like Mac OS X'
fake.linux_platform_token() # Linux
# 'X11; Linux i686'
fake.linux_processor() # Linux处理器
# 'x86_64'
fake.mac_platform_token() # Mac
# 'Macintosh; U; PPC Mac OS X 10_11_2'
fake.mac_processor() # Mac处理器
# 'Intel'
fake.opera() # Opera
# 'Opera/8.32.(Windows 98; Win 9x 4.90; mr-IN) Presto/2.9.188 Version/10.00'
fake.safari() # Safari
# ('Mozilla/5.0 (Windows; U; Windows NT 6.0) AppleWebKit/533.43.6 (KHTML, like '
# 'Gecko) Version/4.0.5 Safari/533.43.6')
fake.user_agent() # 随机用户代理
# 'Mozilla/5.0 (compatible; MSIE 9.0; Windows 95; Trident/3.0)'
fake.windows_platform_token() # Windows
# 'Windows NT 6.2'
filetype
- guess
- extention:获得扩展名和文件类型
- mime:获得文件实际类型
G
getpass
功能:读取密码
- getuser:从环境变量中获取用户名
- getpass:等待用户输入密码
- 不会将密码显示出来
H
I
J
json
学习文档:JSON
K
L
M
missingno
- matrix - 类似于 seaborn 中的缺失值热图,可以最多展示数据集中50列的密度情况,也可以通过右侧的迷你图,来整体观测数据集的缺失情况
- bar - 案列显示缺失值情况
- heatmap - 展示缺失值之间的相关性,本质上,揭示了变量的存在与否对另一个变量的存在的影响程度。而对于没有缺失值的列或者全完没有值的列,则不会出现在这里
- dendrogram - 树状图与热图类似,展示的是列之间缺失的相关性,而与热图不同的地方是通过一组列来揭示相关性
multiprocessing
multithreading
N
numerizer
- 将汉语表达转为具体数字
numpy
- c_:将x[]和y[]横纵坐标合并为(x,y)
O
openpyxl
学习文档:openpyxl
-
load_workbook(path):读取电子表格文件
-
sheetnames:获取工作簿所有列表的表名
-
active:获取活动表
-
title:获取表名称
-
sheet[sheetname/index]:获取表对象
-
sheet['A1']:获取单元格对象
- value:获取单元格的值
-
cell(row,column):获取单元格对象
-
max_row:最大行值
-
max_column:最大列值
-
# 从表中取得行列 for rowofCellObjects in sheet['A1','C3']: for cellobj in rowofcellobjects: # 打印坐标,值 print(cellObj.coordinate,cellObj.value)
- columns:获取列对象
- rows:获取行对象
-
列字母与数字转换
-
from openpyxl.utils import get_column_letter, column_index_from_string
-
数字转字母:get_column_letter(num)
-
字母转数字:column_index_from_string(letter)
-
-
create_sheet():创建表格
-
del sheet对象:删除表格
-
save(path):保存电子表格
-
from openpyxl.styles import Font # 设置字体格式 """ 参数: name:字符串;字体名字。 size:整形;大小点数。 bold:布尔型;True表示粗体。 italic:布尔型;True表示斜体。 """ new_font=Font(size=24,italic=True) sheet['A1'].font=new_font
-
可将公式以字符串形式传入
-
row_dimensions[1].height():设置行高
-
column_dimensions[1].width():设置列宽
-
merge_cell(‘A1:C3’):合并单元格
-
unmerge_cell(‘A1:C3’):拆散单元格
-
freeze_panes(‘A2’):冻结单元格;解冻可设置为‘A1’或者None
-
from openpyxl.chart import Reference,Series,BarChart """ Reference参数: sheet:表格 min_col:最小列 min_row:最小行 max_col:最大列 max_row:最大行 Series参数: Reference对象 title:标题 BarChart参数: title:标题 append(Series对象) sheet.add_chart(Barchart对象,'左上角单元格位置') """
-
os
学习文档:os模块 读写、创建 文件
.表示当前文件夹
..表示当前父文件夹
-
path:对路径进行操作
- chdir(path):改变当前工作目录
- getcwd(path):获取当前工作目录
- abspath(path):返回绝对路径,可将相对路径转为绝对路径
- isabs(path):判断是否绝对路径
- relpath(path,start):返回从开始路径start到path的相对路径字符串,默认当前目录为开始路径start
- dirname(path):path参数中最后一个斜杠之前的内容
- basename(path):path参数中最后一个斜杠之后的内容
- getsize(path):返回path参数中文件的字节数
- join:连接文件夹名称和当前文件名
-
listdir(path):返回文件夹中文件名字字符串的列表
-
chdir(path):改变工作文件夹
-
makedirs(name,mode,exist_ok):创建多层新文件夹
- name:你想创建的目录名
- mode:要为目录设置的权限数字模式,默认的模式为 0o777 (八进制)。
- exist_ok:是否在目录存在时触发异常。如果exist_ok为False(默认值),则在目标目录已存在的情况下触发FileExistsError异常;如果exist_ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常。
-
makedir(name,mode,exist_ok):创建单层新文件夹
-
sep:路径分隔符
-
split():将路径根据需要打散
-
删除命令(谨慎使用,先print查看一下待删除文件,删除过后不可恢复)
- unlink(path):删除path处文件
- rmdir(path):删除path处空文件夹
- rmtree(path):删除path处文件夹内所有内容
-
安全删除可使用模块send2trash
- send2trash(path):将被删除文件放入回收站
-
walk:遍历文件夹
- 返回值(当前文件夹名称(foldername),当前文件夹中子文件夹列表(subfolder),当前文件夹中文件列表(filename))
P
paramiko
学习文档:paramiko
-
两个核心组件:SSHClient、SFPClient
-
SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。
-
connect():实现远程服务器的连接与认证,对于该方法只有hostname是必传参数。
-
常用参数 hostname 连接的目标主机 port=SSH_PORT 指定端口 username=None 验证的用户名 password=None 验证的用户密码 pkey=None 私钥方式用于身份验证 key_filename=None 一个文件名或文件列表,指定私钥文件 timeout=None 可选的tcp连接超时时间 allow_agent=True, 是否允许连接到ssh代理,默认为True 允许 look_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许 compress=False, 是否打开压缩
-
-
set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:
-
设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种: AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认 WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接 RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项
-
-
exec_command():在远程服务器执行Linux命令的方法。
-
open_sftp():在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。
-
# 利用SSHClient对象的open_sftp()方法,可以直接返回一个基于当前连接的sftp对象,可以进行文件的上传等操作. sftp = client.open_sftp() sftp.put('local.txt','remote.txt')
-
-
import paramiko # 实例化SSHClient ssh_client = paramiko.SSHClient() # 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接 ,此方法必须放在connect方法的前面 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接SSH服务端,以用户名和密码进行认证 ,调用connect方法连接服务器 ssh_client.connect(hostname='192.168.137.105', port=22, username='root', password='123456') # 打开一个Channel并执行命令 结果放到stdout中,如果有错误将放到stderr中 stdin, stdout, stderr = ssh_client.exec_command('df -hT ') # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值 # 打印执行结果 print(stdout.read().decode('utf-8')) # 关闭SSHClient连接 ssh_client.close()
-
# 配置私人密钥文件位置 private = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') #实例化SSHClient ssh_client = paramiko.SSHClient() #自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接SSH服务端,以用户名和密码进行认证 ssh_client.connect( hostname='192.168.137.100', port=22, username='root', pkey=private )
-
-
SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。
-
Channel:是一种类Socket,一种安全的SSH传输通道; Transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel; Session:是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话。
-
SFTPCLient作为一个sftp的客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传、下载、权限、状态 from_transport(cls,t) 创建一个已连通的SFTP客户端通道 put(localpath, remotepath, callback=None, confirm=True) 将本地文件上传到服务器 参数confirm:是否调用stat()方法检查文件状态,返回ls -l的结果 get(remotepath, localpath, callback=None) 从服务器下载文件到本地 mkdir() 在服务器上创建目录 remove() 在服务器上删除目录 rename() 在服务器上重命名目录 stat() 查看服务器文件状态 listdir() 列出服务器目录下的文件
-
import paramiko # 实例化一个transport对象 tran = paramiko.Transport(('192.168.137.100', 22)) # 连接SSH服务端,使用password tran.connect(username="root", password='123456') # 或使用 # 配置私人密钥文件位置 private = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') # 连接SSH服务端,使用pkey指定私钥 tran.connect(username="root", pkey=private) # 获取SFTP实例 sftp = paramiko.SFTPClient.from_transport(tran) # 设置上传的本地/远程文件路径 local_path = "/home/1.txt" remote_path = "/tmp/1.txt" # 执行上传动作 sftp.put(local_path, remote_path) # 执行下载动作 sftp.get(remote_path, local_path) # 关闭Transport通道 tran.close()
-
-
pathlib/pathlib2
由于pathlib不再维护,因此使用最新的pathlib2
- Path():根据操作系统拼接路径
- WindowsPath:遵守Windows路径规则:\分隔符
- PosixPath:遵守Linux路径规则:/分隔符
- cwd:改变工作路径
- home:主目录
- mkdir:创建单个目录(不会创建子目录)
- is_absolute:判断是否绝对路径
- anchor:根文件夹
- drive:输入单个字母,表示存储盘
- stem:文件名
- suffix:文件后缀
- parent:包含文件的文件夹,为一个Path对象
- parents:求值为一组Path对象,可以通过[num]进行索引
- name:文件名,由主干名(stem)+后缀名(suffix)
- glob:列出文件夹内容
- *可以进行匹配多个字符
- ?匹配单个字符
- exists:检查路径有效性
- is_file:判断是否是个文件
- is_dir:判断是否是个文件夹
- open:返回一个File对象
- 调用read()、write()方法:获取文件字符串
- readlines():获取每行文件字符串列表
- close():关闭文件
- read_text:返回文本文件全部内容的字符串
- write_text:传递给它的字符串创建一个新的文本文件
- shelve:以二进制形式保存变量
- open():打开文件
- shelve[‘索引’]=保存内容
- close():保存文件
- keys():返回所有的键
- values():返回所有的值
pohan
-
汉语转拼音
-
from pohan.pinyin.pinyin import Style # 不带声调的 pinyin_list = pohan.pinyin.han2pinyin("程序员", style=Style.NORMAL) print(f'我是不带声调的结果:{pinyin_list}') # 带声调的 pinyin_list = pohan.pinyin.han2pinyin("程序员", style=Style.TONE) print(f'我是带声调的结果:{pinyin_list}') # 带数字声调的 pinyin_list = pohan.pinyin.han2pinyin("程序员", style=Style.TONE3) print(f'我是带数字声调的结果:{pinyin_list}') """ 参数 hans (unicode 字符串或字符串列表) – 汉字字符串( '程序员晚枫' )或列表( ['程序员', '晚枫'] ). 可以使用自己喜爱的分词模块对字符串进行分词处理, 只需将经过分词处理的字符串列表传进来就可以了。 style: 指定拼音风格,默认是 TONE 风格。更多拼音风格详见 Style errors: 指定如何处理没有拼音的字符。详见 处理不包含拼音的字符 default: 保留原始字符 ignore: 忽略该字符 replace: 替换为去掉 \u 的 unicode 编码字符串 ('\u90aa' => '90aa') callable 对象: 回调函数之类的可调用对象。 heteronym: 是否启用多音字 strict: 只获取声母或只获取韵母相关拼音风格的返回结果 是否严格遵照《汉语拼音方案》来处理声母和韵母, 详见 strict 参数的影响 v_to_u (bool): 无声调相关拼音风格下的结果是否使用 ü 代替原来的 v 当为 False 时结果中将使用 v 表示 ü neutral_tone_with_five (bool): 声调使用数字表示的相关拼音风格下的结果是否 使用 5 标识轻声 """
progressbar
-
from progressbar import ProgressBar, Percentage, Bar, Timer, ETA, FileTransferSpeed widgets = ['Progress: ', Percentage(), ' ', Bar('#'), ' ', Timer(), ' ', ETA(), ' ', FileTransferSpeed()] progress = ProgressBar(widgets=widgets) for i in progress(range(100)): # do something time.sleep(0.05)
pypdf4
-
旋转页面
-
from PyPDF4 import PdfFileReader,PdfFileWriter """ pdf_reader=pdfFileReader(path) pdf_writer=pdfFileWriter() PdfFileReader(path):读文件 page_r = getPage().rotateClockwise(90):将文件顺时针旋转90度 # page_l = getPage().rotateCounterClockwise(90):将文件逆时针旋转90度 pdf_writer.addPage(page_r):将文件写入 # 将文件持久化存储 with open() as fh: pdf_writer.write(fh) """
-
-
拆分页面
-
for page in range(pdf_reader.getNumPages()): pdf_reader=PdfFileReader(pdf_path) pdf_writer=PdfFileWriter() pdf_writer.addPage(pdf_reader.getPage(page)) output=f'{name_of_split}{page}.pdf' # 拆分 with open(output,'wb') as output_pdf: pdf_writer.write(output_pdf)
-
-
合并pdf
-
pdf_writer=PdfFileWriter() for path in paths: pdf_reader=PdfFileReader(path) # 合并 for page in range(pdf_reader.getNumPages()): pdf_writer.addPage(pdf_reader.getPage(page)) with open(output,'wb') as out: pdf_writer.write(out)
-
-
加密pdf
-
for page in range(pdf_r.getNumPages()): pdf_w.addPage(pdf_r.getPage(page)) # 加密 pdf_w.encrypt(user_pwd=secret,owner_pwd=secret,use_128bit=True) with open(output,'wb') as f: pdf_w.write(f)
-
python-office
学习文档:python-office
pyautogui
方法
-
PAUSE:等待时间
-
size():获取屏幕尺寸,函数返回两个整数的元组,包含屏幕的宽度和高度的像素数。
-
position():获取鼠标位置
-
onScreen():判断坐标是否在屏幕范围内
-
moveTo(x,y,duration):绝对位置移动至坐标(x,y),花费时间duration秒,函数将鼠标指针立即移动到屏幕的指定位置。表示x、y坐标的整数值分别构成了函数的第一个和第二个参数。可选的duration整数或浮点数关键字参数指定了将鼠标指针移到目的位置所需的秒数;如果不指定,默认值是0,表示立即移动(在pyautogui函数中,所有的duration关键字参数都是可选的)。
-
moveRel(x,y,duration):也可以写作move(),相对位置移动至坐标(x,y),花费时间duration秒
-
click(x,y,clicks,interval,duration,button):点击(x,y)处clicks次,间隔interval秒,点击button:right、left键,持续duration秒
-
mouseDown():按下鼠标
-
mouseUp():释放鼠标
-
doubleClick():双击鼠标
-
rightClick():点击鼠标右键
-
middleClick():单击中键
-
keyDown():按下键盘按键
-
keyUp():释放键盘按键
-
press():按下并释放
-
scroll(num,x,y):鼠标运行至x,y处;num>0:向上滚num个单位,num<0:向下滚;
-
mouseInfo():鼠标位置信息,当前位置像素颜色(RGB)
-
pixel():获取像素颜色(返回RGB元组)
-
pixelMatchesColor():函数将返回True,如果屏幕上给定的x和y坐标处的像素与给定的颜色相匹配,则返回True。第一个和第二个参数是整数的x和y坐标,第三个参数是屏幕像素必须匹配的RGB颜色的3个整数元组
-
locateOnScreen():是屏幕上首次发现该图像时左边的x坐标、顶边的y坐标、宽度以及高度。如果屏幕上找不到该图像,locateOnScreen()函数将返回None。请注意,要成功识别,屏幕上的图像必须与提供的图像完全匹配。即使只差一个像素,locateOnScreen()函数也会引发ImageNotFoundException异常。如果你改变了屏幕分辨率,之前截取的图片可能会与当前屏幕上的图片不一致
-
locateAllOnScreen():返回一个Generator对象。可以将它传递给list(),返回一个4个整数元组的列表。在屏幕上找到图像的每个位置,都会有一个4个整数元组。
-
getActiveWindow():获取Window对象(在Windows操作系统上运行时,从技术上讲是Win32Window对象),返回当前接收键盘焦点的窗口的Window对象,拥有该Window对象后,你可以获取它的所有属性。这些属性描述了它的大小、位置和标题。
-
left、right、top、bottom:一个整数,表示窗口边的x或y坐标。
-
topleft、topright、bottomleft、bottomright:两个整数的命名元组,表示窗口角的(x, y)坐标。
-
midleft、midright、midleft、midright:两个整数的命名元组,表示窗口边中间的(x, y)坐标。
-
width,height:一个整数,表示窗口的一个维度,以像素为单位。
-
size:两个整数的命名元组,表示窗口的(宽度,高度)。
-
area:一个整数,表示窗口的面积,以像素为单位。
-
center:两个整数的命名元组,表示窗口的中心(x, y)坐标。
-
centerx、centery:一个整数,表示窗口中心的x或y坐标。
-
box:4个整数的命名元组,表示窗口(左侧、顶部、宽度、高度)。
-
title:窗口顶部标题栏中的文本字符串。
-
topleft:获取窗口左上方x,y坐标
-
isMinimized:获取窗口是否最小化
-
isMaxmized:获取窗口是否最大化
-
Maxmize:最大化窗口
-
Minimize:最小化窗口
-
activate:激活当前窗口
-
restore:还原窗口大小
-
close:退出窗口
-
-
getAllWindows():返回屏幕上所有可见窗口的Window对象列表。
-
getWindowsAt(x, y):返回所有包含点(x, y)的可见窗口的Window对象列表。
-
getWindowsWithTitle(title):返回所有在标题栏中包含字符串title的可见窗口的Window对象的列表。
-
getAllTitles():该函数返回所有可见窗口的字符串列表。
-
write():向计算机发送虚拟按键操作。这些操作产生什么效果,取决于当前获得焦点的窗口和文本输入框。我们可能需要先向文本框发送一次鼠标单击事件,确保它获得焦点。在同一行中放两个命令,用分号隔开,这让交互式环境不会在两个指令之间提示输入。这防止了你在click()和write()调用之间,不小心让新的窗口获得焦点,从而让这个例子失败。可以传入可选的第二个参数,在每个字符之间添加短时间暂停。这种渐进的打字机效果,对于较慢的应用可能有用,它们处理按键事件的速度不够快,跟不上PyAutoGUI。
-
dragTo(x,y):鼠标拖拽至绝对位置x,y处
-
dragRel(x,y):也可写作drag(x,y),鼠标拖拽至相对位置x,y处
-
press([‘a’,’b’],interval):按下a、b键,间隔interval秒
-
typewrite(str):传入字符串(不支持中文),可以切换输入法至中文后让键盘自动打字
-
可以查看pyautogui.KEYBOARD_KEYS列表,看看PyAutoGUI接收的所有可能的键字符串。'shift'字符串指的是左边的Shift键,它等价于'shiftleft'。'ctrl'、'alt' 和 'win' 字符串也一样,它们都是指左边的键。
-
键盘按键字符串 含义 'a' 、 'b' 、 'c' 、 'A' 、 'B' 、 'C' 、 '1'
、 '2' 、 '3' 、 '!' 、 '@' 、 '#'等单个字符的键 'enter' ( or 'return' or '\n' ) 回车键 'esc' Esc键 'shiftleft' 、 'shiftright' 左右Shift键 'altleft' 、 'altright' 左右Alt键 'ctrlleft' 、 'ctrlright' 左右Ctrl键 'tab' ( or '\t' ) Tab键 'backspace' 、 'delete' Backspace键和Delete键 'pageup' 、 'pagedown' Page Up键和Page Down键 'home' 、 'end' Home键和End键 'up' 、 'down' 、 'left' 、 'right' 上下左右箭头键 'f1' 、 'f2' 、 'f3'等 F1~F12键 'volumemute' 、 'volumedown' 、 'volumeup' 静音、减小音量、放大音量键(有些键盘没有这些键,但你的操作系统仍能理解这些模拟的按键) 'pause' Pause键 'capslock' 、 'numlock' 、 'scrolllock' Caps Lock键、Num lock键和Scroll Lock键 'insert' Ins键或Insert键 'printscreen' Prtsc键或Print Screen键 'winleft' 、 'winright' 左右Win键(在Windows操作系统上) 'command' Command键(在macOS上) 'option' Option键(在macOS上)
-
-
hotkey(‘ctrl’,‘shift’,‘esc’):顺序按下ctrl、shift、esc按键,并反向释放
-
alert(text,title,button):警告窗口
-
confirm(text,title,buttons):确认窗口
-
prompt(text,title,default):内容窗口
-
password(text,title,default,mask):密码窗口
-
screenshot(path,region):path为截图保存位置,region=(x,y,width,height)
-
locateCenterOnScreen(path,region=(x,y,width,height)):匹配照片在屏幕位置
-
出错解决
- 如果程序出错卡死,可以使用PyAutoGUI的故障安全功能,快速地将鼠标指针滑动到屏幕的4个角之一。如果PyAutoGUI随后发现鼠标指针在角落里,会引发pyautogui. FailSafeException异常。非PyAutoGUI指令不会有这个1/10秒的延迟。
-
技巧
- 每次运行脚本时使用相同的屏幕分辨率,这样窗口的位置就不会改变。
- 你的脚本单击的应用程序窗口应该最大化,这样每次运行脚本时,它的按钮和菜单都在同一个地方。
- 在等待内容加载的过程中,要加入足够的暂停时间;你不希望脚本在应用程序准备好之前就开始单击。
- 使用locateOnScreen()来找到要单击的按钮和菜单,而不是依赖x、y坐标。如果你的脚本找不到需要单击的东西,就停止程序,而不是让它继续瞎点。
- 使用getWindowsWithTitle()来确保你认为脚本正单击的应用程序窗口是存在的,并使用activate()方法将该窗口放在前台。
- 使用第11章中的日志模块来保存脚本所做事情的日志文件。这样一来,如果你不得不中途停止你的脚本,你就可以改变它,从它上次结束的地方重新开始。
- 在你的脚本中加入尽可能多的检查。想一想,如果出现一个意外的弹出窗口,或者你
的计算机失去了网络连接,它可能会失败。 - 你可能需要在脚本刚开始时监督该脚本的执行,确保它正常工作。
- countdown(num):输出倒计时,提醒用户脚本即将执行
pil
学习文档:pil
名称 | RGB值 | 名称 | RGB值 |
---|---|---|---|
白色 | (255,255,255,255) | 红色 | ( 255, 0, 0, 255 ) |
绿色 | (0,255,0,255) | 蓝色 | ( 0, 0, 255, 255 ) |
灰色 | (128,128,128,255) | 黄色 | ( 255, 255, 0, 255 ) |
黑色 | (0,0,0,255) | 紫色 | ( 128, 0, 128, 255 ) |
-
ImageColor.getcolor():参数('颜色英文','RGBA');实例('red','RGBA)、('RED','RGBA')
-
from PIL import Image,ImageDraw,ImageFont # 实例化Image对象 img = Image.open(path) # 获取图片尺寸 width,height = img.size # 获取图片名称 img.filename # 获取图片格式 img.format # 获取格式描述 img.format_description # 保存图片 img.save(path) # 返回空白对象 Image.new() """ 字符串'RGBA',将颜色模式设置为RGBA(还有其他模式,但本书没有涉及)。 大小,是两个整数元组,作为新图像的宽度和高度。 图像开始采用的背景颜色,是一个表示RGBA值的 4 整数元组。你可以用ImageColor. getcolor()函数的返回值作为这个参数。另外,Image.new()也支持传入标准颜色名称的字符串。 例如: img = Image.new('RGBA', (100, 200), 'purple') """ # 裁剪图片 crop_img = Image.crop((左上角x,左上角y,右下角x,右下角y)) # 复制图像 copy_img = img.copy() # 粘贴图像 paste_img = img.paste(crop_img,(左上角x,左上角y)) # 调整图像大小 resize_img = img.resize(宽,高) # 旋转图像(如果expand = True 会自动调整图片大小) img.rotate(度数,expand = True) # 翻转图像 img.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转 img.transpose(Image.FLIP_TOP_BOTTOM) # 上下翻转 # 更改单个像素 img.getpixel((坐标)) # 获取像素颜色 img.putpixel((坐标),(RGB)) # 更改像素颜色 # 绘画 img = Image.new('RGBA',(200,200),'white') ImageDraw.Draw(img) # 点 ImageDraw.point(xy = [(点1坐标),(点2坐标)……],fill = 颜色) # 线 ImageDraw.line(xy = [(点1坐标),(点2坐标)……],fill = 颜色,width = 线宽(默认1)) # 矩形 ImageDraw.rectangle(xy = (left,top,right,bottom),fill = 填充颜色,outline = 矩形轮廓颜色) # 椭圆 ImageDraw.ellipse(xy = (left,top,right,bottom),fill = 填充颜色,outline = 矩形轮廓颜色) # 多边形 ImageDraw.polygon(xy = [(点1坐标),(点2坐标)……],fill = 填充颜色,outline = 矩形轮廓颜色) # 文本 ImageDraw.text(xy = (左上角x,左上角y),text = '字符串',fill = 文本颜色,font = ImageFont对象) # 测量文本 ImageDraw.textsize(文本字符,ImageFont对象) """ ImageFont对象: truetype(字符串,字体大小) """
pypinyin
将汉z
#属性:
pypinyin.pinyin(hans, style=<Style.TONE:1>, heteronym=False, errors=’default’, strict=True)
1.其中参数hans是(unicode 字符串或字符串列表)-汉字字符串 ( ‘大海’ ) 或列表 ( [‘大’, ‘海’] )
2.参数style是指定拼音风格,默认是TONE风格,带声调。
不带声调: style=pypinyin.NORMAL
风格选择可见:http://www.exceloffice.net/archives/5216
3.heteronym参数表示是否启用多音字识别,Ture打开。
#一些样式
>>> from pypinyin import lazy_pinyin, Style
>>> import pypinyin
>>> lazy_pinyin('中心')
['zhong', 'xin']
>>> lazy_pinyin('中心', style=Style.TONE)
['zhōng', 'xīn']
>>> lazy_pinyin('中心', style=Style.FIRST_LETTER)
['z', 'x']
>>> lazy_pinyin('中心', style=Style.TONE2)
['zho1ng', 'xi1n']
>>> lazy_pinyin('中心', style=Style.CYRILLIC)
['чжун1', 'синь1']
PyQt5
学习文档:
pytz
arrival_nyc='2023-5-15 11:28:50'
time_format = '%Y-%m-%d %H:%M:%S'
nyc_dt_native=strptime(arrival_nyc,time_format)
eastern=pytz.timezone('US/Eastern')
nyc_dt=eastern.localize(nyc_dt_native)
utc_dt=pytz.utc.normalize(nyc_dt.astimezone(pytz.utc))
print(utc_dt)
- 无论何种操作系统,都可以通过datetime和pytz完成时区转换
- 不要用time在不同时区进行转换
- 开发者总是应该把时间表示成UTC格式,然后执行转换操作,最后转为本地时间
pyinputplus
功能:输入验证
-
inputStr():类似于内置的input()函数,但具有一般的PyInputPlus功能。你还可以将自定义验证函数传递给它。
-
inputNum():确保用户输入数字并返回int或float值,这取决于数字是否包含小数点。
-
inputChoice():确保用户输入系统提供的选项之一。
-
inputMenu():与inputChoice()类似,但提供一个带有数字或字母选项的菜单。
- choices:列表类型,提供选项
- numbered:bool类型(True:自动标数字号;False:不自动标数字号)
- lettered:bool类型(True:自动标字母号;False:不自动标字母号)
- caseSensitive:bool类型(True:区分大小写;False:不区分大小写)
-
inputDate():提示输入指定格式日期,返回 datetime.time 对象。
-
inputTime():提示用户在“格式”列表中输入指定格式的时间,返回 datetime.time 对象。
-
inputDatetime():确保用户输入日期和时间,返回 datetime.time 对象。
-
inputUSState():提示用户输入美国州名称或缩写,我们基本用不上。返回状态缩写(除非 returnStateName 参数为 True ,在这种情况下,将返回完整名称)。
-
inputMonth():提示用户输入月份名称,返回所选月份名称的字符串。
-
inputDayOfWeek():提示用户一周中的某一天,返回星期的名称。
-
inputDayOfMonth():提示用户输入从1到28、30或31的数字月份(或闰年为29),取决于给定的月份和年份。以整数形式返回输入的日期。其他参数说明:
year
:给定的年份,它决定了月份中天数的范围。month
:给定的月份,它决定了可以选择的天数范围。
-
inputIP():提示用户输入 IPv4 或 IPv6 地址,以字符串形式返回输入的 IP 地址。
-
inputRegex():提示用户输入与提供的正则表达式字符串(或正则表达式对象)和标志匹配的字符串,返回输入的字符串。
-
inputRegexStr():提示用户输入正则表达式字符串(只支持 Python 风格正则表达式,不支持 Perl 或 JavaScript 风格),返回输入的正则表达式字符串。
-
inputURL():提示用户输入 URL ,以字符串形式返回 URL 。
-
inputZip():提示用户输入3到5位数的美国邮政编码,这个基本也用不上。以字符串形式返回 zipcode 。
-
inputFilename():提示用户输入文件名,文件名不能包含:
\\ / : * ? " < > | 或者以空格结束
-
inputEmail():提示用户输入电子邮件地址,确保用户输入有效的E-mail地址,以字符串形式返回电子邮件地址。
-
inputYesNo():确保用户输入“yes”或“no”响应。
-
inputBool():类似inputYesNo(),但接收“True”或“False”响应,并返回一个布尔值。
-
inputFilepath():确保用户输入有效的文件路径和文件名,并可以选择检查是否存在具有该名称的文件,如果 mustExist 为 True ,则此文件路径必须存在于本地文件系统上,以字符串形式返回文件路径。
-
inputPassword():类似于内置的input(),但是在用户输入时显示*字符,因此不会在屏幕上显示口令或其他敏感信息。
- 如果
correctPassword
为None
,则任何输入由inputPassword()
接受并返回。 strip
的默认值为''
,因此不会出现空白。- 默认情况下,
limit
设置为1
,因此错误的密码尝试会导致引发RetryLimitException
。 - 如果将
limit
设置为None
,则会再次要求用户输入正确的密码。每当用户输入错误的密码时,都会显示ErrorPasswordMsg
字符串。 - 如果
correctPassword
设置为None
,则接受所有输入。 mask
是用于显示的保护密码字符,而不是实际的字符。它可以设置为None
(不隐藏字符)、空白字符串(用户键入时不显示任何内容)或单个字符串(显示此字符而不是按键)。不能将其设置为多字符的字符串。
- 如果
-
inputCustom():自定义功能函数传递给inputCustom
参数:
- prompt:显示提示
- min:最小
- max:最大
- greaterThan:大于
- lessThan:小于
- blank:True表示允许输入空格,False表示不允许输入空格
- limit:限制输入次数
- timeout:限制输入时间(秒)
- default:输入错误时返回默认值,而不是报错
- allowRegexes:正则表达式进行匹配,匹配成功表示输入正确
- blockRegexes:正则表达式进行匹配:匹配失败表示输入正确
- 二者同时使用的话允许优先于禁止
pprint
- pformat():将复杂容器变为字符串返回;类似Json结构
- pprint():格式化打印
pyttsx3
-
import pyttsx3 engine = pyttsx3.init() # 创建engine并初始化 engine.say("结束") engine.runAndWait() # 等待语音播报完毕
-
import pyttsx3 engine = pyttsx3.init() # 创建engine并初始化 rate = engine.getProperty('rate') # 获取当前语速的详细信息 print(rate) # 打印当前语速 engine.setProperty('rate', 125) engine.say("结束") engine.runAndWait() # 等待语音播报完毕 engine.save_to_file(text,filename) # 将text内容转为语音保存到filename中
pyperclip
- copy():将字符复制到剪切板上
- paste():从剪切板上获取字符
- waitForPaste():剪切板非空时返回字符
- waitForNewPaste():剪切板有新字符时返回
Q
R
re
学习文档:正则表达式(re模块)
re.compile():创建一个Regex对象
- re.DOTALL作为第二个参数传入,可以让句点字符匹配所有字符,包括换行
- re.IGNORECASE\re.I:不区分大小写
- 复杂正则表达式
- “”“ ”“”:将正则表达式分为多行书写,以注释的形式传入,增加可读性,#可注释代码,多余的空白字符不会被读取
- re.VERBOSE:作为参数传入就行
- 第二个参数可以使用管道符|进行拼接
search():传入想查找的字符串,返回一个Match对象,只包含第一次出现的匹配文本
group():返回实际匹配文本的字符串
-
传入数字可以取得匹配文本不同部分
-
不传数字可以取得所有部分
groups():取得所有分组
管道|:匹配多个分组
():给待查找的文本进行分组
findall():返回一组字符串,包含被查找的所有文本的列表
- 在没有分组的表达式上调用,返回一个匹配字符串的列表[‘’,’’,……]
- 在有分组的表达式上调用,返回一个含有字符串元组的列表[(‘’),(‘’)……]
?:可选匹配分组
*:匹配零次或多次
+:匹配一次或多次
{}:匹配特定次数
- 可以写两个数字限定范围
- 也可以只写一个数字和,限定下限或者上限
- 贪婪匹配:默认匹配方式,表示尽可能匹配上限个数
- 非贪婪匹配:花括号后面跟一个问号,表示尽可能匹配下限个数
. :匹配换行符以外的所有单个字符
字符分类
-
缩写字符分类 表示 \d 0~9的任何数字 \D 除了0~9的任何数字 \w 任何字母、数字、下划线 \W 除了任何字母、数字、下划线 \s 空格、制表符、换行符 \S 除了空格、制表符、换行符
[]:表示匹配范围
- [0-9]:匹配0-9的任意一个数字
- [a-zA-Z]:匹配字母
- [a-z]:匹配小写字母(匹配大写字母同理)
- [^a-z]:匹配不在方括号内的任意字符
- [自定义字符]:匹配自定义字符分类
^:^str表示以该字符串str匹配开始
$:str$表示以该字符串str匹配结束
sub:替换字符串
- 参数一:替换发现的匹配
- 参数二:正则表达式
快捷组合方式:
- ^\d+$:开始到结尾全是数字
- .*:贪婪匹配所有文本
- .*?:非贪婪匹配所有文本
requests
-
get(url):发送HTTP请求,返回一个Response对象
-
url:目标网站
-
text:以字符串形式返回网站数据
-
content:以二进制形式返回网站数据
-
status_code:状态码,如果等于requests.codes.ok
-
raise_for_status():检查下载是否成功,失败会抛出异常
-
iter_content():可以利用Response的该方法进行循环
-
from fake_useragent import UserAgent ua=UserAgent() header={ 'User-Agent':ua.ie }
-
-
post(url,data):发送POST请求,提交一个表单
- url:目标网站
- data:字典数据,也就是表单中填写的值
- header:字典数据,键:’User-Agent‘、’Cookie‘
round
- 参数:(num1,num2):将num1保存num2位数字
S
socket
学习文档:Socket
speech
import speech
text=speech.input()
speech.say(text)
smtplib
学习文档:smtplib
selenium
-
webdriver
-
[GitHub下载](Releases · mozilla/geckodriver (github.com))
-
Edge(path):path处传入驱动路径
-
implicitly_wait(time):等待策略,如果需要与浏览器交互,需要中途将其暂停
-
get(url):请求url页面
-
title:请求浏览器信息:窗口句柄、尺寸位置、cookie、warning
-
find_element(by=By.NAME,value=‘my-text’):查找元素
- find_element_by_class_name(name)/find_elements_by_class_name(name):使用CSS类的元素
- find_element_by_class_selector(selector)/find_elements_by_selector_name(selector):使用CSS selector的元素
- find_element_by_id(id)/find_elements_by_id(id):匹配id属性值的元素
- ind_element_by_link_text( text )/find_elements_by_link_text( text ):完全匹配提供的text的元素
- find_element_by_partial_link_text( text )/find_elements_by_partial_link_text( text ):包含提供的text的元素
- find_element_by_name( name )/find_elements_by_name( name ):匹配name属性值的元素
- find_element_by_tag_name( name )/find_elements_by_tag_name( name ):匹配标签name的元素(不分大小写,元素区分大小写)
- click():点击该元素
- 特殊
- from selenium.webdriver.common.keys import Keys
- Keys.DOWN,Keys.UP,Keys.LEFT,Keys.RIGHT:键盘箭头
- Keys.ENTER, Keys.RETURN :回车和换行键
- Keys.HOME, Keys.END, Keys.PAGE_DOWN,Keys.PAGE_UP:Home键、End键、PageUp和Page Down键
- Keys.ESCAPE, Keys.BACK_SPACE,Keys.DELETE:Esc键、Backspace键和Delete键
- Keys.F1, Keys.F2,..., Keys.F12:键盘顶部的F1到F12键
- Keys.TAB:Tab键
- 特殊
- click():点击该元素
-
text:获取元素中被请求信息
-
send_keys(value):向该元素输入值
- 可以提供传入特殊值:Keys.HOME:滚动到顶部;Keys.END:滚动到底部
-
submit():提交传入的值
-
back():返回
-
forward():前进
-
refresh():刷新
-
quit():退出
-
# 如果不想退出,可以加入一下几行代码 options = webdriver.ChromeOptions() options.add_experimental_option('detach', True) browser = webdriver.Chrome(options=options)
shutil
- copy(source,destination):将source处文件放在到destination的文件夹
- copytree(source,destination):将整个source文件夹复制到destination文件夹
- move(source,detination):移动文件,可用来对文件重命名
subprocess
- Popen()
- 参数传入执行文件路径:单独启动一个进程运行其它程序
- 返回一个Popen对象
- poll():如果进程在运行返回None;如果程序已终止则返回退出代码(默认为0)
- wait():阻塞进程直到终止
- 可用此方法执行脚本文件
- 传入命令行参数则会让终端执行命令行
- 传入字符串则直接执行字符串
- 传入列表则自动在每一个元素中间加空格
- start+文件路径:使用windows默认应用打开文件
- 参数传入执行文件路径:单独启动一个进程运行其它程序
- run()
- args:表示要执行的命令。必须是一个字符串,字符串参数列表。
- stdin、stdout 和 stderr:子进程的标准输入、输出和错误。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一个已经存在的文件描述符、已经打开的文件对象或者 None。subprocess.PIPE 表示为子进程创建新的管道。subprocess.DEVNULL 表示使用 os.devnull。默认使用的是 None,表示什么都不做。另外,stderr 可以合并到 stdout 里一起输出。
- timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出 TimeoutExpired 异常。
- check:如果该参数设置为 True,并且进程退出状态码不是 0,则弹 出 CalledProcessError 异常。
- encoding: 如果指定了该参数,则 stdin、stdout 和 stderr 可以接收字符串数据,并以该编码方式编码。否则只接收 bytes 类型的数据。
- shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令。
smtplib
-
import smtplib from smtplib import SMTP from email.mime.text import MIMEText from email.header import Header smtpObj = SMTP([host[,port[,local_hostname]]]) """ 参数说明: host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。 port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。 local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。 """ # Python SMTP 对象使用 sendmail 方法发送邮件,语法如下: SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]) """ 参数说明: from_addr: 邮件发送者地址。 to_addrs: 字符串列表,邮件发送地址。 msg: 发送消息(msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意 msg 的格式。这个格式就是 smtp 协议中定义的格式。) """ # 三个参数:第一个为文本内容(可以放入网页脚本),第二个 plain 设置文本格式,第三个 utf-8 设置编码 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("菜鸟教程", 'utf-8') # 发送者 message['To'] = Header("测试", 'utf-8') # 接收者 subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') # 使用QQ邮箱 msg=MIMEText('填写邮件内容','plain','utf-8') msg['From']=formataddr(["FromRunoob",my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号 msg['To']=formataddr(["FK",my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号 msg['Subject']="菜鸟教程发送邮件测试" # 邮件的主题,也可以说是标题 server=smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25 server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码 server.sendmail(my_sender,[my_user,],msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 server.quit() # 关闭连接 # 接下来发送附件 # 构造附件内容 att=MIMEText(open(filename,mode,encode).read(),'base64','utf-8') att1['Content-Type']='application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="test.txt"' message.attach(att1) # 将图片添加到网页中 # 将图片读取进来 with open('图片.png') as fp: msgImage = MIMEImage(fp.read()) # 定义图片ID,在HTML中引用 msgImage.add_header('Content-ID', '<image1>') msgRoot.attach(msgImage) try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功" except smtplib.SMTPException: print "Error: 无法发送邮件"
-
如果我们本机没有 sendmail 访问,也可以使用其他邮件服务商的 SMTP 访问(QQ、网易、Google等)
-
try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号 smtpObj.login(mail_user,mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功" except smtplib.SMTPException: print "Error: 无法发送邮件"
-
T
tabulute
- table:表格
- headers:表头
- firstrow:第一行
- keys:字典键
- tablefmt:
- grid:过滤
- fancy_grid:移除缺失值
- showindex:添加索引
- True
- False
- stralign:放置位置
- center
- left
- right
time
- time():获取目前与UNIX纪元(1970年1月1日0点)相差的秒数
- sleep(n):休眠n秒
tkinter
tqdm
-
参数:
-
iterable=None,可迭代对象。如上一节中的`range(20)` desc=None,传入str类型,作为进度条标题。如上一节中的`desc='It\'s a test'` total=None,预期的迭代次数。一般不填,默认为`iterable`的长度。 leave=True,迭代结束时,是否保留最终的进度条。默认保留。 file=None,输出指向位置,默认是终端,一般不需要设置。 ncols=None,可以自定义进度条的总长度 unit,描述处理项目的文字,默认’it’,即`100it/s`;处理照片设置为’img’,则为`100img/s` postfix,以字典形式传入详细信息,将显示在进度条中。例如`postfix={'value': 520}` unit_scale,自动根据国际标准进行项目处理速度单位的换算,例如`100000it/s`换算为`100kit/s
-
-
返回值
-
with tqdm(range(100), desc='Test') as tbar: for i in tbar: tbar.set_postfix(loss=i/100, x=i) tbar.update() # 默认参数n=1,每update一次,进度+n time.sleep(0.2)
-
-
trange(可迭代对象长度)
-
for i in trange(100, desc='Test1'): time.sleep(0.2)
-
with trange(100, desc='Test2') as tbar: for i in range(100): tbar.set_postfix(loss=i/100, x=i) tbar.update() time.sleep(0.2)
-
U
user-agents
- parse():对浏览器用户代理进行解析
- browser:浏览器属性
- family:浏览器类型
- version:版本号[set]
- version_string:版本号[str]
- os:操作系统属性
- family:操作系统类型
- version:版本号[set]
- version_string:版本号[str]
- device:设备属性
- family:设备类型
- version:版本号[set]
- version_string:版本号[str]
is_mobile
: 是否手机 (iPhone、Android、Blackberry、Windows Phone等)is_tablet
: 是否平板 (iPad、Kindle、Nexus等)is_pc
: 是否传统桌面操作系统 (Windows、OS X、Linux)is_touch_capable
: 是否有触摸功能is_bot
: 是否搜索引擎爬虫
V
W
webbrowser
-
open(url):使用浏览器在同一窗口打开url
-
open_new(url):在新窗口打开url
-
open_new_tab(url):在新页面打开url
-
get(using):使用指定浏览器,否则使用默认浏览器
- 'windows-default':默认浏览器
-
register(name,constructor,instance=None,*,preferred=False)
-
name为浏览器类型名称
-
类型名 类名 mozilla Mozilla(‘mozilla’) firefox Mozilla(‘mozilla’) netscape Mozilla(‘netscape’) galeon Galeon(‘galeon’) epiphany Galeon(‘epiphany’) skipstone BackgroundBrowser(‘skipstone’) kfmclient konqueror() konqueror konqueror() kfm konqueror()
-
-
instance如果为None,constructor将在没有参数情况下调用
-
注册浏览器后get()返回浏览器类型控制器
-
preferred设置为True使得该浏览器成为默认首选
-
wikipedia
- search():搜索
- summary():获取文章摘要
- page():获取完整页面内容
- set_lang():选择语言
winsound
88mport winsound
# frequency频率大于500,duration持续时间(毫秒)大于200
winsound.Beep(frequency,duration)
wget
- download():下载
- url:链接
- out:文件名称
X
xpath
-
表达式含义node选择 node 节点的所有子节点/从根节点选取//选取所有当前节点.当前节点..父节点@属性选取text()当前路径下的文本内容
-
xpath('node') # 选取 node 节点的所有子节点 xpath('/div') # 从根节点上选取 div 元素 xpath('//div') # 选取所有 div 元素 xpath('./div') # 选取当前节点下的 div 元素 xpath('//@id') # 选取所有 id 属性的节点
xpinyin
-
#先导入 from xpinyin import Pinyin #简单使用一下 from xpinyin import Pinyin p = Pinyin() result = p.get_pinyin('小琳爱分享') #此处结果:xiao-lin-ai-fen-xiang result = p.get_pinyin('小琳爱分享','') #此处结果:xiaolinaifenxiang result = p.get_pinyin('小琳爱分享',' ') #此处结果:xiao lin ai fen xiang print(result) #结果:xiao-lin-ai-fen-xiang
-
from xpinyin import Pinyin p = Pinyin() result = p.get_pinyin('小琳爱分享',tone_marks='marks') print(result) #结果:xiǎo-lín-ài-fēn-xiǎng #就会在指定拼音上显示音调 result = p.get_pinyin('小琳爱分享',tone_marks='numbers') print(result) #结果:xiao3-lin2-ai4-fen1-xiang3 #就会在每个拼音后面显示音调
Y
Z
zipfile
功能:压缩文件
- zipfile(path,mode):设置打包文件路径path
- namelist(path):返回zip文件中所有文件和文件夹
- getinfo(path):返回一个ZipFile对象,该对象有自己的属性:file_size、compress_size
- extractall(path):解压文件到path文件夹
- extract(path):解压单个文件
- write(path,compress_type=ZIP_DEFLATED):将path处文件以deflate压缩算法进行过压缩