Python常用相关
Python移动目录文件
1 | import shutil |
指定时间删除
1 | import os |
tuple元组
tuple
单元素写法要加逗号(,),即:tuple_1 = (1,)
,而不能这样写:1tuple_1(1)`,这样的写法Python会自动认为是一个整数而不是一个元组。
双重循环用法
1 | import collections |
1 | _cards = [Card(rank,suit) for suit in suits for rank in ranks] |
循环遍历
1 | for card in reversed(deck): # 反向迭代 |
阻塞:
指程序未得到所需计算资源时被挂起的状态。
常见的阻塞形式有:网络I/O阻塞、磁盘I/O阻塞、用户输入阻塞等
非阻塞:
程序在等待某操作过程中,自身不被阻塞。
可以继续处理其它的事情,则称该程序在操作上是非阻塞的
非阻塞并不是在任何程序级别、任何情况下都可以存在的
仅当程序封装的级别可以囊括独立的子程序单元时,才可能存在非阻塞状态
同步:
不同程序单元为了完成某个任务
在执行过程中需靠某种通信方式以协调一致,称这些程序单元是同步执行的
同步意味着有序
异步:
为完成某个任务
不同程序单元之间过程中无需通信协调,也能完成任务的方式
不相关的程序单元之间可以是异步的
异步意味着无序
多进程:
多进程就是利用CPU的多核优势
在同一时间并行地执行多个任务,可以大大提高执行效率
协程(Coroutine):
又称微线程、纤程,协程是一种用户态的轻量级线程。
拥有自己的寄存器上下文和栈,本质上是个单线程
相对于多进程,无需线程上下文切换的开销,无需原子操作锁定及同步的开销
编程模型非常简单
从Python 3.4开始,加入了携程
的概念
但这个版本的携程还是以生成器对象为基础的
在Python3.5则增加了async/await
,使得携程的实现更加方便
携程的用法:
event_loop
事件循环,相当于一个无限循环
可以把一些函数注册到这个事件循环上
当满足条件发生的时候,就会调用对应的处理方法
coroutine(携程)
在Python中常指代为协程对象类型
可以将协程对象注册到时间循环中,它会被事件循环调用
可以使用async关键字来定义一个方法
这个方法在调用时不会立即被执行,而是返回一个协程对象
task
任务,它是对协程对象的进一步封装,包含了任务的各个状态future
代表将来执行或没有执行的任务的结果,实际上和task没有本质区别
Xpath://p[position()<4]
# 取前三条数据//p[last()]
# 最后一个元素
# 模糊匹配//div[contains(@class,'fash')]
##div的class属性带有fash的
**# 通配符 ***//p/*
# 取div下面所有的元素//div[@*]
# 取div下所有带属性的元素
# 运算符//div[@class = 'float-fixed'] and @id='t-float'
//div[@class = 'float-fixed'] | @id='t-float'
//tr[position()>2 and position()<8]
# 位置大于2小于8
**Python去除**`\ufeff`、`\xa0`、`\u3000` 爬虫的时候遇到了这些特殊字符,记录一下处理方法 `\ufeff` 字节顺序标记 去掉\ufeff,只需改一下编码就行,把UTF-8编码改成UTF-8-sig `with open(file_path, mode='r', encoding='UTF-8-sig') as f:` `s = f.read()` `\xa0`是不间断空白符 去除\xa0 `.replace(u'\xa0', u' ')` `\u3000`是全角的空白符 去除\u3000 `.replace(u'\\u3000',u'')` 去除空格和\xa0、\u3000 `title.strip().replace(u'\u3000', u' ').replace(u'\xa0', u' ')`
参考帖子地址:https://www.cnblogs.com/xufengnian/p/10788195.html
https://www.cnblogs.com/zqifa/p/python-9.html