Python简直要上天

L[-1]

  • 倒着取元素,右对齐取值,下标为-1表示取最后一个
  • 配合切片:
    L[n1:n2:n3] #起:止:方向*跨度,方向为负表示倒着变绿遍历(--i)
取网页数据一定要注意编码
  • python str默认编码是unicode
  • print函数直接打印gbk字符串报错
  • 利用webDriver不用担心,它会解析,dirver.page_source就是源码
  • urllib这类返回字节的需要对应页面的charset 去decode,然而可怕的是gb2312的页面调用decode('gb2312')会转换失败,decode('gbk’)就可以,大概看脸,子集问题
  • I/O操作也要指定编码
正则表达式
  • re.compile(pattern)生成一个RegexObject()对象,再调用findall方法,直接re.match('pattern',)少量数据好像还好,数据一长♂,就匹配失败了,对因为确定pattern正确,match失败以为是编码乱码造成的然后跑去encode/decode了半天
关于整除和%
  • python的/是浮点除,整除符号是//,python的整除是向下(负无穷)舍入,so Python中的%表示求模,而其他C语言家族(C++,C#)是向0舍入,%表示编程课本上的求余
一个奇怪的bug
  • print输出一和十会乱码,但是用print随便输出点其他中文,就输出正常了。。。
  • 好吧,komodo 输出窗口的锅,cmd没问题
Json
  • Python中的list[]对应Json中的array[],dict{}对应Object{},刚好符号一致,而C#的list对应Object{},so,这两种语言通信时要注意,不好像是C#比较特殊来的?
  • json.dumps(sort_key=True)可以对无序字典进行排序
  • Python的json模块可以处理内置数据(list,dict,元组不会拼),对于自定义类,想格式化成json格式需要将实例转换为字典{},d={} d.update(obj.__dict__) json.dumps(d)
  • json格式字符串转化为实例,需要先json.loads(s)转化为dict,然后调用类的构造函数,↓下面那条第三点
  • json.load(open('xx.json),'r')和json.dump(open('xx.json','w'))可以直接读写json格式的文件
obj.__dict__
  • 获取对象的属性,也就是用self修饰的实例属性
  • __init__函数里self.__dict__.update(obj)会复制obj(一般是个dict)的所有内容给self实例 ,简直就是拷贝构造函数一样的存在
  • 当然也可以Class(**obj)这样来构建新对象,用于json之类的键值对格式格外爽
可变参数和关键字参数
  • 可变参数*
    • 形参使用*修饰表示该参数接受一组任意长度的数据, 函数里实际接收的数据是一个list或是一个tuple
    • 实参前添加*表示将list或tuple的每个值按顺序传入形参位置
  • 关键字参数**
    • 接受一组dict(键值对)形式的参数,会将与key对应的value赋给同名形参,无序(字典本身就是无序的)
    • 上一条使用**obj作为参数的构造函数就是很好的体现,这条和上条和上上条其实是有联系的对不对
控制台中的进度条
  • '\r',将光标移到行首(\n是下一行,print()函数默认添加了\n)
    • sys.stdout.write()对将要输出的内容不添加任何结尾符,再调用sys.stdout.flush()将输出内容暂存在控制台
    • 或者直接print('xxxx',end='\r')
  • '\b',退格,删除前面打印的内容,没什么好说的
  • 下载进度:
    request.urlretrieve(url,file,hook),其中hook的参数为已下载数据块a,数据块大小b,远程文件大小c,per=a*b*100/c
  • 在资源管理器中打开
    os.system('explorer/select,%s'% path)

    推荐阅读