python
文章平均质量分 50
侠客岛的含笑
我只不过在说有可能发生的事情,我并没有肯定的说法,不相信也不怀疑,要是想法偏向任何一边,而真相却相反的时候。(这是以前菜鸡的我)
展开
-
python3.5爬取网站图片
import urllib.requestimport socketimport reimport sysimport ostargetDir = r"C:\Users\null\Desktop\pic"def destFile(path): if not os.path.isdir(targetDir): os.mkdir(targetDir) pos =原创 2016-11-19 19:49:01 · 1859 阅读 · 1 评论 -
python-11-如何拆分含有多种分隔符的字符串?
解决方案: 不过这样会有一个问题,如果两个字符串是一个分隔符,WTK.结果会多出一个字符串 所以我们可以把空字符串过滤掉。 第二种方式,推荐。re.split() +号的意思是,对于前面的这种形式,至少有一个或者是多个原创 2017-05-02 22:04:06 · 1975 阅读 · 0 评论 -
python-12-如何判断字符串a是否以字符串b开头或结尾(改变文件权限)?
os模块和系统调用相关;stat模块和文件状态相关 endswith可以接受一个元组(不能使列表)为参数,满足其中之一,就会返回Trues.endswith(('.sh','.py'))True列表报错: 过滤出以.py和.sh为结尾的文件[name for name in os.listdir('.') if name.endswith(('.sh'),'.py')]st_mode是原创 2017-05-03 16:43:05 · 3604 阅读 · 0 评论 -
python-13-如何调整字符串中文本的格式?sub函数
sub是substitute的所写,表示替换; re.sub是个正则表达式方面的函数,用来实现通过正则表达式,实现比普通字符串的replace更加强大的替换功能; re.sub共有五个参数。 其中三个必选参数:pattern(模式字符串), repl(被替换), string(表示要被处理,要被替换的那个string字符串) 两个可选参数:count, flags使用正则表达式在文件中找到原创 2017-05-03 17:15:10 · 887 阅读 · 0 评论 -
python-14-如何将多个小字符串拼接成一个大的字符串?
解决方案:方法一:加号使用的是str自带的构造函数add大于号使用的是str自带的构造函数gt把列表赋值给一个变量for p in pl: s += p不过呢,这种方式是存在巨大的浪费的。每一次的结果都是一个临时的字符串,用后扔掉。这也意味着大量的字符串拷贝和解释器释放。 浪费啊,好心疼,我可是农村的孩子啊。方法二:使用join方法,传入的参数:可迭代对象。一次性创建字符串 ''.原创 2017-05-03 17:33:51 · 9784 阅读 · 2 评论 -
python-15-如何对字符串进行左,右,居中对齐?
如果是正常迭代,是这样的。d = {'Adddd' : 500.0,'sB' : 0.04,'qqqqqqqqqC' : 477,'Dddd' : 100.0,'E' : 40 }for i in d: print(i,':',d[i])我们需要把字符串的宽度调整成相同的。 方法一:方法二: 当我们取得最大长度时,进行迭代。d = {'Adddd' : 500.0,'sB' : 0.04原创 2017-05-03 19:41:56 · 11539 阅读 · 0 评论 -
python-16-如何去掉字符串中不需要的字符?
方法一: s = ' abc 123 'print(s)print(s.strip())s = '___ abc 123 ===='print(s.strip())print(s.strip('= _'))输出结果: abc 123 abc 123___ abc 123 ==== abc 123 缺点:不能原创 2017-05-03 21:40:04 · 11781 阅读 · 0 评论 -
python-17-如何读取文本文件?如何处理二进制文件?如何设置文件的缓冲?
前期由于计算机是由美国人发明的,所以ACSII,一个字节代表一个字符,字符串抽象的是连续的字节。 后来为了支持各国语言,发明了各种编码格式。unicode才是真正意义上的字符串s = u'你号'编码(unicode转换成str)print(s.encode('gbk'))print(s.encode('utf8'))四个字节b'\xc4\xe3\xba\xc5' 六个字节b'\xe4\原创 2017-05-04 22:10:26 · 3377 阅读 · 0 评论 -
python-18-如何将文件映射到内存?
当我们使用read读取文件时可以使用seek来定位指针。但是如果是二进制文件,定位读取就是一个难题了。 方案: 使用dd命令创建一个1MB大小内容为0的文件; 然后我们对该文件进行映射import mmapmmap.mmap在不同平台稍有差别f = open('demo.bin','r+b')f.fileno() =>文件描述符 5 - fileno文件描述符,并不是一个文件对原创 2017-05-05 16:23:06 · 2998 阅读 · 0 评论 -
python-19-如何访问文件的状态?如何使用临时文件?
import os os.start('文件名')获取文件状态os.lstart('文件名')不跟软链接os.rstart('打开的文件描述符')f = open('文件')f.fileno()得到文件描述符文件的类型存储在st_mode里 判断是否为文件夹stat.S_ISDIR(s.st_mode) 返回False判断是否为普通文件stat.S_ISREG(s.st_mode)原创 2017-05-05 16:50:56 · 2254 阅读 · 1 评论 -
python-20-如何读写CSV数据?
我们通过csv库reader函数和writer函数来执行读和写操作。这两个函数都需要传入一个文件对象 python3和python2的写法有点不一样 报错:_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)Sorry, folks, we've got an原创 2017-05-06 12:35:15 · 1073 阅读 · 0 评论 -
python-21-如何读写json数据?如何解析简单的xml文档?
这里老师讲了一个小例子,调用百度的语音识别API来实现语音识别。大概过程是:录音获取token语音识别import json# dumps方法可以把一个python对象转换成json的字符串l = [1,2,'abc',{'name':'Bob','age':10}]print(json.dumps(l))#有些转换差别很大,有些转换差别很小,d = {'b':None,'a':5,原创 2017-05-06 13:38:00 · 692 阅读 · 0 评论 -
python-函数装饰器的使用-25(斐波那契)
计算斐波那契数列。def fibonacci(n):if n <= 1:return 1return fibonacci(n - 1) + fibonacci(n - 2)print(fibonacci(3))重复计算子问题,很浪费效率解决这种重复计算子元素的问题我们可以使用缓存来解决。先在缓存中查找,缓存没有再尖酸,然后计算结果原创 2017-05-09 21:00:04 · 1482 阅读 · 1 评论 -
python-10-如何在一个for语句中迭代多个可迭代对象?
from random import randintchinese = [randint(60,100) for _ in range(40)]math = [randint(60,100) for _ in range(40)]english = [randint(60,100) for _ in range(40)]for i in range(len(math)): print(c原创 2017-05-02 21:30:49 · 3430 阅读 · 0 评论 -
python-9-如何对迭代器做切片操作?
文件并不能直接进行切片操作。redlines()可以把每一行读入到一个列表中。 弊端,readlines()方法会一次性的把文件导入到内存当中,如果文件很大,那就尴尬了(内存不足)。 然后 lines[100:300]. yeah,it’s work.readlines(),文件指针跑到文件结尾处,使用f.seek(0)使指针回到结尾处for line in f: pinr(line原创 2017-05-02 18:19:08 · 888 阅读 · 0 评论 -
python-8-如何进行反向迭代以及如何实现反向迭代?
l = [1,2,3,4,5]l.reverse()print(l)reverse()对列表的元素进行反向排序。 改变了原列表,从某种情形是不允许的l = [1,2,3,4,5]print(l[::-1])切片返回的数组和原数组同样大小,浪费资源。 推荐使用自带函数reversed(l),其将得到列表的反向迭代器,reversed实际上调用的是reversed方法 PS:iter(l)得原创 2017-05-02 18:00:14 · 2576 阅读 · 0 评论 -
python-1-如果在列表,字典在,集合中根据条件筛选数据?
通用做法:迭代+判断data = [1,5,6,-2,-6,0,9]res=[]for x in data: if x >= 0: res.append(x)print(res)高级方式: 列表解析: 随机生成-10到10的十个随机数 注意:python2.x->xrange();python3.x->range()from random import ran原创 2017-04-18 09:44:37 · 4247 阅读 · 0 评论 -
python-2-如何为元组中的每个元素命名,提高程序可读性?
大量的索引值对程序的维护是不利的,因为不便于阅读。 在c语言中,有两种解决方法; 解决方法1: c语言中宏定义的方式;#define NAME 0#define AGE 1解决方法2: c语言的枚举形式;enum Student{ NAME, AGE, SEX,}python 方案一:student=('eminem','16','male','961737原创 2017-04-19 12:18:15 · 760 阅读 · 0 评论 -
python-2-2-如何统计序列中元素的出现频率?
from random import randintdata = [randint(0,20) for _ in range(30)]print(data)# 创建字典c = dict.fromkeys(data,0)for x in data: c[x] += 1print(c)# 排序print(sorted(c.items(),key=lambda item:item[1],原创 2017-04-19 15:25:58 · 946 阅读 · 0 评论 -
python-2-3-如何根据字典中值的大小,对字典中的项排序?
方案1:print(sorted([9,1,2,8,5]))from random import randintd = {x: randint(60,100) for x in 'xyzabc'}# 直接排序会按照键进行排序sorted(d)# 字典的可迭代对象list(iter(d))# 如果将字典转换成元组的形式,元组会对第一个数值进行比较,如果相等,会对第二个数值进行比较(97,'原创 2017-04-19 15:51:09 · 4066 阅读 · 0 评论 -
python-3-如何快速找到多个字典中的公共键(key)?
普通方案1:from random import randint,samplesample('abcdefg',randint(3,6))# 字典解析s1 = {x: randint(1,4) for x in sample('abcdefg',randint(3,6))}s2 = {x: randint(1,4) for x in sample('abcdefg',randint(3,6))原创 2017-04-20 09:11:52 · 1888 阅读 · 0 评论 -
python-4-如何让字典保持有序?
python字典默认是不带有序性的。也就是说其不维护每项进入字典的先后顺序。 解决方法: d= {}d['Jim'] = (1,35)d['Leo'] = (2,37)d['Bob'] = (3,40)for k in d:print(k)print('===========================================')from collections import原创 2017-04-20 09:56:55 · 10148 阅读 · 0 评论 -
python-5-如何实现用户的历史记录功能(最多n条)?
from random import randintN = randint(0,100)def guess(k): if k == N: print('right') return True if k < N: print('%s is less-than N' % k) else: print('%s is原创 2017-04-20 10:33:15 · 1054 阅读 · 0 评论 -
python-24-如何派生类内置不可变类型并修改其实例化行为?如何为创建大量实例节省内存?
# 创建一个插口IntTuple,包含内置插口tuple,行为一致.tuple是一个不可变对象,所以我们不能从self来删除一些数据class IntTuple(tuple): #__new__的参数是一个类对象,此时我们来修改他 def __new__(cls,iterable): # 使用生成器对象 g = (x for x in iterable if原创 2017-05-10 18:51:49 · 851 阅读 · 0 评论 -
python-23-读写excel文件
我们尝试添加总分列,并计算各个同学的总分成绩 直接获取某一行所有值,第二项是从第几个格子开始 import xlrdbook = xlrd.open_workbook('demo.xlsx')#sheets可以获取所有的表,返回一个sheet对象book.sheets()#另一种获取sheet的方法sheet = book.sheet_by_index(0)# 访问行数sheet.nro原创 2017-05-10 18:51:08 · 579 阅读 · 0 评论 -
python-22-构建xml文档
Elemnt 对应父元素 ElementTree对应结构树 from xml.etree.ElementTree import Element,ElementTreeimport csve = Element('Data')e.set('name','abc')e.text = '123'from xml.etree.ElementTree import tostring# 可以看到原创 2017-05-10 18:49:47 · 528 阅读 · 0 评论 -
python-为被装饰的函数保存元数据-26
func_name 相当于 __name__ __doc__函数的字符串文档 __module__函数处于哪个模块 __defaults__保留函数的默认参数,在python,默认函数在创建函数时就定义好了。记住,不是调用时创建哦 __closure__ 访问函数的闭包 在默认参数中最好不要使用可变对象。 def mydecorator(func): def wrap原创 2017-05-10 19:00:15 · 1689 阅读 · 0 评论 -
python-定义带参数的装饰器-27
先建立装饰器框架:def typeassert(*ty_args,**ty_kargs): def decorator(func): # func -> a,b 传入两个参数 # d = {‘a’:int,'b':str}建立一个字典 def wrapper(*args,**kargs): # 判断参数和类型是否在字典中对应原创 2017-05-10 19:00:59 · 814 阅读 · 0 评论 -
python-实现属性可修改的函数装饰器-28
from functools import wrapsimport timeimport loggingdef warn(timeout): def decorator(func): def wrapper(*args,**kargs): start = time.time() #记录返回值 res = func原创 2017-05-10 19:04:19 · 431 阅读 · 0 评论 -
python-6-如何实现可迭代对象和迭代器对象?
python的可迭代对象:list(列表)是可迭代对象,dict(字典)是可迭代对象,string(字符串)也是可迭代对象。l = [1,2,3,4]s = 'abcdef'for x in l:print(x)for x in s:print(x)print(iter(l))print(iter(s))可以由python的内置函数iter得到一个迭代器对象这里写代码片 参数要么支持迭原创 2017-04-20 15:05:48 · 1864 阅读 · 0 评论 -
python-7-如何使用生成器函数实现可迭代对象?
创建List和generator的区别仅在于最外层的[]和()如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generatorgenerator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。生成器既实现了迭代器接口,也实现了可迭代接口 。也就是说g.iter(原创 2017-05-02 17:11:22 · 691 阅读 · 0 评论