1、threading.Event类的实例方法is_set = isSet,即为同一个函数,当该类的实例已经调用了set()方法时,该函数返回True,否则为False
2、threading.Event机制类似于一个线程向其它多个线程发号施令的模式,其它线程都会持有一个threading.Event的对象,这些线程都会等待这个事件的“发生”,如果此事件一直不发生,那么这些线程将会阻塞,直至事件的“发生”。
具体参考:Python中使用threading.Event协调线程的运行
3、创建线程实例时,使用setDaemon函数的原因:[Python]Threading.Thread之Daemon线程
4、str类实例的strip([chars])方法去除str中头尾的相应字符[chars],如果没有提供chars,则去掉头尾的空格键。
5、os.walk(dstDir)返回一个生成器,生成器每次返回的内容为:当前遍历的路径,[该路径下的所有目录], [该路径下的所有文件]
6、exec的使用:
对于同一段代码:
def myTest():
a = False
exec('a=True')
print 'a=', a
if __name__ == '__main__':
myTest()
Python 2.7中,exec是关键字,解释器在碰到它会把后面的语句在当前空间运行,因此上面代码运行结果为:a=True
Python 3.x中,exec是一个函数,此时exec('a=True')相当于一个内嵌函数,函数内部变量为局部变量,此时mytest中的a与exec语句中的a并不是同一个变量,
因此上面代码的运行结果为a=False
参考链接:What's the difference between eval, exec, and compile in Python?
7、itertools.groupby()把迭代器中相邻的重复元素挑出来放在一起,例程:
for key, group in itertools.groupby('AAABBBCCAAA'):
print key, list(group)
运行结果:
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']
8、eval函数可以把json字符串转化为字典对象,等价于json.loads(json.dumps({'name':''jyj', 'age':18})),例程:
import json
a = json.dumps({'name':'jyj', 'age':18})
b = {'info':a}
print eval(b['info'])['name']
运行结果:jyj
9、select模块的使用:Python socket.accept nonblocking?
使用select模块,实现非阻塞sock编程
10、time和datetime模块:
(1)utc时间转化为当前时区(如东八区)时间:
import datetime
TIME_ZONE_OFFSET = 3600 * 8
data['create_time'] = datetime.datetime.fromtimestamp(data['create_time'].timestamp()+TIME_ZONE_OFFSET).\
strftime('%Y-%m-%d %H:%M:%S')
11、python与http请求相关的库(包括自带和第三方库):
若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了
python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httplib2, requests
python3.X 有这些库名可用: urllib, urllib3, httplib2, requests
两者都有的urllib3和requests, 它们不是标准库. urllib3 提供线程安全连接池和文件post支持,与urllib及urllib2的关系不大. requests 自称HTTP for Humans, 使用更简洁方便
对于python2.X:
urllib和urllib2的主要区别:
urllib2可以接受Request对象为URL设置头信息,修改用户代理,设置cookie等, urllib只能接受一个普通的URL.
urllib提供一些比较原始基础的方法而urllib2没有这些, 比如 urlencode
具体参考:python中urllib, urllib2,urllib3, httplib,httplib2, request的区别
12、处理带有非asic字符的url
urllib2.quote(u"Grønlandsleiret, Oslo, Norway".encode('UTF-8'))
相关参考:Python encode url with special characters
13、计算crc32值:
from zlib import crc32
crc32_val = crc32('hello,world') & 0xffffffff
14、Scrapy ImportError: No module named items问题解决方法:
1.改项目名称
2.改爬虫名称
3.在爬虫的代码里加入from __future__ import absolute_import
相关参考:Scrapy ImportError: No module named items
14、re模块找出匹配字符串的下标:
[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]
15、python处理http实体,如:&
try:
... # Python 2.6-2.7
... from HTMLParser import HTMLParser
... except ImportError:
... # Python 3
... from html.parser import HTMLParser
...
>>> h = HTMLParser()
>>> print(h.unescape('£682m'))
相关参考:Decode HTML entities in Python string?
16、os库求文件的size
import os
stat_info = os.stat("test.py")
file_size = stat_info.st_size
17、hashlib求文件hash值:
import sys
import hashlib
# BUF_SIZE is totally arbitrary, change for your app!
BUF_SIZE = 65536 # lets read stuff in 64kb chunks!
md5 = hashlib.md5()
sha1 = hashlib.sha1()
with open(sys.argv[1], 'rb') as f:
while True:
data = f.read(BUF_SIZE)
if not data:
break
md5.update(data)
sha1.update(data)
print("MD5: {0}".format(md5.hexdigest()))
print("SHA1: {0}".format(sha1.hexdigest()))
18、shutil删除非空文件夹
import os
import shutil
os.remove(path) #删除文件
os.removedirs(path) #删除空文件夹
shutil.rmtree(path) #递归删除文件夹
19. 一行命令在当前路径启动文件服务器:
python2: python -m SimpleHTTPServer
python3: python3 -m http.server
20.使用urllib的parse来提取url的参数
from urllib import parse
url = "https://play.google.com/store/apps/developer?id=TikTok+Inc.&hl=en&gl=US"
app_id = parse.parse_qs(parse.urlparse(url).query).get("id")[0]