hello,大家好,我是一灰灰,之前介绍了一篇使用她的名字来画出她的美图的文章,其中主要使用的Java来实现的,今天呢,我们再来用Python来实现一下
同样最终的代码量也不会超过三十行
hello,大家好,我是一灰灰,之前介绍了一篇使用她的名字来画出她的美图的文章,其中主要使用的Java来实现的,今天呢,我们再来用Python来实现一下
同样最终的代码量也不会超过三十行
今天写个python爬虫时,发现一个有意思的问题,因为不同的目标网站的编码可能并不一样,所以再进行文本解析时,直接使用response.charset
返回的编码格式进行处理文本,结果出现了上面这个问题,解决方法也比较简单,改用gbk
即可
1 | fp = open(file, 'r', encoding='gb2312') |
遇到一个实际的场景,需要针对某个目录下的所有文件进行统一规则的重命名,使用shell脚本是一个比较好的选择,此外python也可以快速的实现
下面介绍一下核心代码
1 | import os |
python内置了一个非常简单的服务器,可以用来实现简单的http通信
如python3 启动服务器命令
1 | # 默认端口号为8000 |
如果是python2,需要启动服务器,可以使用命令
1 | python -m SimpleHTTPServer 9000 |
Python提供了较好的url编码封装,常借助 parse
来实现,一般常见的使用姿势有两种
1 | >>> from urllib import parse |
python中获取本机ip以及主机名
1 | import socket |
在python中,可以直接通过','.join
的方式来连接一个list,但是如果list中的元素不是string,会报错
1 | >>> a = [1,2,3] |
针对非string元素的列表的转换时,可以考虑借助表达式语言来处理,如下
1 | >>> a = [1,2,3] |
python3.7 通过pip进行安装时,提示ssl certificate问题
如下提示:
1 | pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. |
解决办法,用国内镜像源
1 | pip install aiohttp -i http://pypi.douban.com/simple --trusted-host pypi.douban.com |
记录一个代码中误用科学计数法导致所有的数据增大十倍的问题
科学计数法用e表示,后面跟上数字n,表示10的n次方;然后10^8用科学计算法怎么写?
正确写法
1 | 1e8 # 前面的1不能缺少 |
错误用法
1 | 10e8 # 这个实际上是10亿 |
日志对于一个应用程序而言,不可获取;特别是在问题定位,链路分析往往是最直观,最有效的富足工具;所以在python中可以怎样便捷的使用日志模块呢
python虽然是一个弱类型的语言,在编码中,不需要特别声明参数类型,然而在实际的场景中,这种不现实指定参数类型经常会带来预期之外的问题,而且编译器还不会提示错误
如果我有一个函数,对参数类型和返回类型都有要求,可以怎么做?
1 | def 函数名(参数: 参数类型...) -> 返回值类型: |
一般而言,我并不会直接操作excel文件,如果需要输出表格的时候,我会选择csv文件,用英文逗号来分割不同的单元格;csv文件的优点是简单,文本格式,vim可以直接打开编辑,excel也可以打开可以方便的转换为excel文档;可以说即适合开发人员,也适合给运营同学
然而有个蛋疼的问题,csv文件中文乱码问题,下面记录下,在python中如何解决
接收一个or多个迭代器,将对象中对应的元素打包成一个个元组,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
1 | >>> list(zip([1,2,3], ['a', 'b', 'c'])) |
说明:借助*
可以将zip打包的元组解压为之前的数据
返回对象object的属性和属性值的字典对象
1 | >>> class A: |
返回参数类型
语法
1 | type(object) |
上面两种用法表示的含义不同
实例
1 | >>> type('str') |
将可迭代系列(如列表)转换为元组
1 | >>> tuple([1,2,3]) |
访问父类中的方法
1 | >>> class A: |
注意,在多继承时,会从左到右找匹配的方法,广度优先
将对象转化为字符串
1 | >>> str([1,2,3]) |
修饰静态方法
1 | >>> class A: |
对所有可迭代的对象进行排序
1 | sorted(iterable, key=None, reverse=False) |
返回排好序的列表
1 | >>> a = [1,3, 2, 9, 4] |
注意:列表的sort()方法无返回直接作用于列表; sorted()有返回,原对象不变
1 | >>> a=[('b',2),('a',1),('c',3),('d',4)] |
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
一灰灰blog
切片,主要用于切片操作函数里的参数
语法
1 | slice(stop) |
举例
1 | >>> list(range(0, 10))[slice(4)] |
与 getattr对应,设置属性值(属性可以不存在)
1 | class A: |
创建一个无序不重复元素集
1 | >>> set([1,2,3,2,1]) |
注意传参为可迭代对象
返回浮点数 x 的四舍五入值,准确的说保留值将保留到离上一位更近的一端(四舍六入)
会有精度丢失,要求高的,不要用
1 | >>> round(2.674, 2) |
注意,如果保留位的后一个为5时,需要再往后看一位,如果有,则进;没有则舍
返回对象的string格式
1 | >>> repr([1,2,3]) |
返回可迭代的对象
语法
1 | range(start, stop[,step]) |
举例
1 | >>> list(range(0, 10, 3)) |
可以说是最常见的一个函数了,除了常见的输出在终端之外,还支持输出到文件
语法定义
1 | print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) |
sys.stdout
标准输出与前面介绍的chr
配对,返回字unicode字符对应的ascii/unicode码
1 | >>> ord('a') |
打开文件,常配合with语句使用
语法
1 | open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) |
参数说明
file
: 必需,文件路径(相对或者绝对路径)。mode
: 可选,文件打开模式buffering
: 设置缓冲encoding
: 一般使用utf8errors
: 报错级别newline
: 区分换行符closefd
: 传入的file参数类型返回迭代器的下一个元素
语法
1 | next(iterator[,default] |
iterator
: 可迭代对象default
: 没有下一个元素时返回的默认值,不设置时,没有元素抛异常实例
1 | >>> a = iter([1,2,3]) |
从上面的case,也可以大致看出它常配合while循环一起使用
返回给定参数中的最小值
1 | >>> min(1,2,3) |
内存查看对象,是指对支持缓冲区协议的数据进行包装,返回元组列表
1 | >>> memoryview(b'abc') |
根据提供的函数,对传入的序列做映射
语法定义如下
1 | map(function, iterable, ...) |
function
: 函数iterable
: 一个or多个序列实例如下
1 | >>> list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])) |
与global
对象,返回全部局部变量
1 | >>> def m(): |
将元组或字符串转换为列表
1 | >>> aTuple = (123, 'hello', {'a':123}) |
len()
可以用来返回字符串,列表,字典,集合,元组等的长度or个数
1 | >>> len([1,2,3,4]) |
判断参数class
是否是类型参数 classinfo
的子类。
1 | issubclass(class, classinfo) |
请注意:两个参数必须都是类
这个比较好理解了,简单举例说明
1 | >>> class A: |
如果我们需要判断一个对象的类型,则推荐使用上一篇介绍的isinstance()
,如
1 | >>> isinstance(B(), A) |
因为python是弱类型语言,所以拿到一个变量我们实际上是不确定它是什么类型的,这个时候就可以借助isinstance
来判定
1 | >>> isinstance('123', int) |
将一个字符串或数字转换为整型
注意:int函数第二个参数可以指定进制数,实现将其他进制的字符串转换为十进制的整数
1 | >>> int('11') |
上面分别演示的是十进制、二进制、八进制、十六进制的字符串转整数
接收标准输入,返回String类型,用于与外界打交道
1 | >>> a = input('enter: ') |
返回对象的唯一标识符,标识符是一个整数
1 | >>> id('hello world') |
注意,上面两个字符串并不一样,但是返回的标识相同,实际上这两个字符串指向的是同一个内存,只是长度不一样而已
Update your browser to view this website correctly. Update my browser now