python cookbook
python cookbook学习
别说话写代码
这个作者很懒,什么都没留下…
展开
-
python cookbook 13.9 通过文件名查找文件
#你要写一个涉及到文件查找操作的脚本,比如对日志归档文件的重命名工具,不想在python脚本中调用shell,或者你要实现一些shell不能做的功能#查找文件可使用os.walk()函数,传一个顶级目录给它。下面是查找特定的文件名并答应所有符合条件的文件全路径:import osdef findfile(start,name): for relpath,dirs,files in ...原创 2019-06-10 10:07:02 · 191 阅读 · 0 评论 -
python cookbook 13.8 创建和解压归档文件
#你要创建或解压常见格式的归档文件(比如.tar.tgz或.zip)#shutil模块有两个函数--make_archive()和unpack_archive()可派上用场:import shutilshutil.unpack_archive('pysot-master.zip')shutil.make_archive('testzip','zip','test.py') #第二个参数...原创 2019-06-10 10:06:15 · 188 阅读 · 0 评论 -
python cookbook 13.7 复制或移动文件和目录
#你想复制或移动文件和目录,但又不想调用shell命令。shutil模块有很便捷的函数可以复制文件和目录,用起来很简单。import shutilshutil.copy(src,dst) #cp src dstshutil.copy2(src,dst) #cp -p src dst 连同属性一起复制shutil.copytree(src,dst) #cp -R src dsts...原创 2019-06-10 10:05:35 · 180 阅读 · 0 评论 -
python cookbook 13.6 执行外部命令并获取它的输出,执行命令行脚本
#你想执行一个外部命令并以python字符串的形式获取执行结果,使用subprocess.check_output()函数。import subprocessout_bytes = subprocess.check_output(['netstat','-a']) #执行一个指令的命令并将执行结果以一个字节字符串的形式返回。如果要文本形式返回,加一个解码步骤即可。# out_text ...原创 2019-06-09 21:43:20 · 345 阅读 · 0 评论 -
python cookbook 13.5 获取终端的大小
#你需要知道当前终端的大小以便正确的格式化输出。使用os.get_terminal_size()函数来做到这一点import ossz=os.get_terminal_size()print(sz)原创 2019-06-09 21:41:43 · 764 阅读 · 0 评论 -
python cookbook 13.4 运行时弹出密码输入提示
#你写了个脚本,运行时需要一个密码。让用户自己输入.python的getpass模块正是你需要的。你可以让你很轻松的弹出密码输入提示#并且不会在用户中断回显密码import getpassuser = input('enter user name:')# user = getpass.getuser() #在这里不会弹出用户名的输入提示,它会根据该用户的shell环境或依据本地系统的...原创 2019-06-09 21:40:55 · 380 阅读 · 0 评论 -
python cookbook 13.3 解析命令行选项
#你的程序如何能够解析命令行选项(位于sys.argv中)。argparse模块可被用来解析命令行选项。下面一个简单例子演示了最基本的用法import argparseparser = argparse.ArgumentParser(description='Search some files') #创建一个ArgumentParser实例parser.add_argument(dest...原创 2019-06-09 21:40:10 · 185 阅读 · 0 评论 -
python cookbook 13.2 终止程序并给出错误提示
#你想向标准错误打印一条消息并返回某个非零状态码来终止程序运行。你有一个程序像下面这样终止,抛出一个SystemExit异常,使用#错误消息作为参数,例如:raise SystemExit('it failed!')#消息将在sys.stderr中打印,然后程序以状态码1退出#本节虽然短,但能解决在写脚本时的一个常见问题。也就是说,当你想要终止某个程序时,你可能会像下面这样写:im...原创 2019-06-09 21:39:19 · 1065 阅读 · 0 评论 -
python cookbook 13.1 通过重定向/管道/文件接受输入
#你希望脚本接受任何用户任务最简单的输入方式。包括将命令行的输出通过管道传递给该脚本、重定向文件到该脚本,或在命令行中#传递一个文件名或文件名列表给该脚本。可以使用python内置的fileinput模块import fileinputdef scr(): with fileinput.input() as f_input: for line in f_input:...原创 2019-06-09 21:38:28 · 586 阅读 · 0 评论 -
python cookbook 12.1 启动与停止线程
#你要为需要并发执行的代码创建/销毁线程。threading库可以在单独的线程中执行任何的在python中可以调用的对象,可以创建一个thread#对象并将你要执行的对象以target参数的形式提供给该对象。import timedef countdown(n): while n>0: print('T-minus',n) n-=1 ...原创 2019-05-13 10:10:29 · 183 阅读 · 0 评论 -
Python文件和文件夹的移动、复制、删除、重命名
文章转自:https://blog.csdn.net/woshisangsang/article/details/74360612一,概述python中对文件和文件夹进行移动、复制、删除、重命名,主要依赖os模块和shutil模块,要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动、复制、删除、重命名,用到的时候直接查询就行。二,例子展示#文件、文件夹的移...转载 2019-05-07 09:31:15 · 839 阅读 · 0 评论 -
python将图片转为gif动图
# -*- coding: UTF-8 -*-import osimport imageiodef create_gif(image_list, gif_name): frames = [] for image_name in image_list: if image_name.endswith('.jpg'): print(i...原创 2019-05-06 16:49:21 · 5713 阅读 · 2 评论 -
python cookbook 5.2 打印输出至文件中
#想将print()函数的输出重定向到一个文件中去。在print()函数中指定file关键字参数,像下面:with open('somefile.txt','wt') as f: print('hello world',file=f) #需要注意:文件必须是以文本模式打开,若是二进制模式则会出错...原创 2019-05-06 09:35:27 · 118 阅读 · 0 评论 -
python cookbook 5.1 读写文本数据
#你需要读写各种不同编码的文本数据,比如ASCII,UTF-8,UTF-16等,使用带有rt的open()函数读写文本文件with open('somefile.txt','rt') as f: data = f.read()with open('somefile.txt','rt') as f: for line in f: pass #类似,为了写...原创 2019-05-06 09:34:32 · 236 阅读 · 0 评论 -
python cookbook 4.15 顺序迭代合并后的排序迭代对象 heapq.merge()
#有一系列排序序列,想将他们合并后得到一个排序序列并在上面迭代遍历,heapq.merge()函数可以帮你解决这个问题import heapqa=[1,3,5,7]b=[2,4,6,8]for x in heapq.merge(a,b): print(x)#heapq.merge()可迭代特性意味着它不会立马读取所有序列。意味着你可以在非常长的序列中使用它,而不会有太大...原创 2019-05-05 09:57:21 · 213 阅读 · 0 评论 -
python cookbook 4.14 展开嵌套的序列
#你想将一个多层嵌套的序列展开成一个单层列表,可以写一个yield from 语句的递归生成器来轻松解决这个问题from collections import Iterabledef flatten(items,ignore_types=(str,bytes)): for x in items: if isinstance(x,Iterable) and not is...原创 2019-05-05 09:55:53 · 181 阅读 · 0 评论 -
python cookbook 4.12 不同集合上元素的迭代 itertools.chain()
#想在多个对象执行相同的操作,但是这些对象在不同的容器中,你希望代码在不失可读性的情况下避免写重复的循环#itertools.chain()方法可以简化这个任务。它接受一个可迭代对象列表作为输入,并返回一个迭代器,有效的屏蔽掉多个在容器中的细节from itertools import chaina=[1,2,3,4]b=['x','y','z']for x in chain(a,b)...原创 2019-05-05 09:54:47 · 161 阅读 · 0 评论 -
python cookbook 4.11 同时迭代多个序列 zip() zip_longest()
#你想迭代多个序列,每次分别从一个序列中取一个元素,使用zip()函数x=[1,5,4,2,10,7]y=[101,78,37,15,62,99]for x,y in zip(x,y): print(x,y)#zip(a,b)会生成一个可返回元组(x,y)的迭代器,其中x来自a,y来自b。一旦其中某个序列到结尾,迭代宣告结束,因此迭代长度#跟参数中最短序列长度一致a=...原创 2019-05-05 09:53:17 · 154 阅读 · 0 评论 -
python cookbook 4.10 序列上索引值迭代 enumerate()
#你想在迭代一个序列的同事跟踪正在被处理的元素索引,用enumerate()函数可以解决这个问题my_list=['a','b','c']for i,val in enumerate(my_list): print(i,val)#为了按传统行号输出(行号从1开始),你可以传递一个开始参数my_list=['a','b','c']for i,val in enumerat...原创 2019-04-29 10:03:01 · 346 阅读 · 0 评论 -
python cookbook 4.9 排列组合的迭代(排列permutations(),可重复组合combinations_with_replacement,不可重复组合combinations)
#若想遍历一个集合中元素的所有可能的排列或组合#itertools模块提供了三个函数来解决这类问题。其中一个是itertools.permutations(),它接受一个集合并产生#一个元组序列,每个元组由集合中所有元素的一个可能排列组成,也就是说通过打乱集合中元素排列顺序生成一个元组items=['a','b','c']from itertools import permutation...原创 2019-04-25 10:06:45 · 2136 阅读 · 0 评论 -
python cookbook 4.8 跳过可迭代对象的开始部分(itertools.islice(), itertools.dropwhile())
#你想遍历一个可迭代对象,但是它开始的某些元素你并不感兴趣,想跳过他们#itertools模块中有一些函数可以完成这个任务。首先介绍的是itertools.dropwhile()函数,向其传递一个函数对象和一个可迭代对象,他会返回#一个可迭代对象,丢弃原有序列中直到函数返回False之前的所有元素,然后返回后面所有元素#示例,假如你在读取一个开始部分是几行注释的源文件。with open...原创 2019-04-29 10:01:08 · 217 阅读 · 0 评论 -
python cookbook 4.7 迭代器切片(islice())
#你想得到一个由迭代器生成的切片对象,但是标准切片操作做不到#函数itertools.islice()正好适用于在迭代器和生成器上做切片操作def count(n): while True: yield n n+=1c=count(0)print(c[10:20])#现在使用islice()操作import itertoolsfor ...原创 2019-04-25 10:03:47 · 330 阅读 · 0 评论 -
python cookbook 4.5 反向迭代
#若你想反向迭代一个序列,可以使用内助的recersed()函数a=[1,2,3,4]for x in reversed(a): print(x)#反向迭代仅仅当对象的大小可预先确定或者对象实现了__reversed__()的特殊方法时才能生效。#如果两者都不符合,必须先将对象转换为一个列表才行def func(): f=open('somefile') ...原创 2019-04-24 09:55:58 · 172 阅读 · 0 评论 -
python cookbook 4.3 使用生成器创建新的迭代模式(实现range)
#如果想实现一个自定义迭代模式,跟普通的内主函数比如range(),reversed()不一样。#若想实现一种新的迭代模式,使用一个生成器函数来定义它。下面是一个生产某个范围内浮点数的生成器:def frange(start,stop,increment): x=start while x<stop: yield x x+=increme...原创 2019-04-24 09:54:07 · 204 阅读 · 0 评论 -
python cookbook 4.2 代理迭代
#构建了一个自定义容器对象,里面包含列表、元组或其他可迭代对象。想直接在新容器对象上执行迭代操作class Node: def __init__(self,value): self._value=value self._children=[] def __repr__(self): return 'Node({!r})'.form...原创 2019-04-24 09:51:48 · 201 阅读 · 0 评论 -
python cookbook 4.1 手动遍历迭代器
#想遍历一个可迭代对象所有元素,但不想使用for循环。使用next()函数,但注意要捕获StopIteration异常def manual_iter(): with open('/path') as f: try: while True: line = next(f) print(l...原创 2019-04-24 09:50:21 · 183 阅读 · 0 评论 -
python写入excel表格(xls,xlsx等)
写excel表要用到xlwt模块,官网下载(http://pypi.python.org/pypi/xlwt)1、导入模块 import xlwt2、创建workbook(其实就是excel,后来保存一下就行) workbook = xlwt.Workbook(encoding = 'ascii')3、创建表 worksheet = workbook.add_sheet...原创 2019-04-22 15:57:37 · 14567 阅读 · 4 评论 -
python cookbook 3.4 二八十六进制整数,二进制八进制十六进制十进制准换
#需要转换或者输出使用二进制,八进制或者十六进制表示的整数。可以分别使用bin(),oct(),hex()函数x=1234print(bin(x))print(oct(x))print(hex(x))#整数有符号,若处理负数,输出结果会包含一个负号。x=-1234print(format(x,'b'))print(format(x,'x'))#若想产生一个无符号...原创 2019-04-16 14:38:10 · 194 阅读 · 0 评论 -
python cookbook 3.3 数字的格式化输出
#需要将数字格式化后输出,并控制数字的位数、对其、千位分隔符和其他的细节#格式化输出单个数字的时候,可以使用内置的format()函数x = 1234.56789print(format(x,'.3f'))print(format(x,':>10.1f')) #共10位,保留小数点后一位,向后对其,左边空余填充:print(format(x,'.<10.1f'))pr...原创 2019-04-16 14:35:56 · 221 阅读 · 0 评论 -
python cookbook 3.2 执行精确的浮点数运算
#这是由于浮点数底层的误差引起的。可以使用decimal模块来计算from decimal import localcontext,Decimala=Decimal('1.3')b=Decimal('1.7')print(a/b)with localcontext() as ctx: ctx.prec=3 print(a/b)with localcontext()...原创 2019-04-16 14:33:40 · 244 阅读 · 0 评论 -
python cookbook 3.1 数字的四舍五入
#若要对浮点数执行指定精度的舍入运算,使用内置round(value,digits)函数即可print(round(1.34,1))print(round(1.35,1)) #四舍五入print(round(-1.27,1)) #向下舍入print(round(1.25361,3))#参数digits可以为负数,这种舍入运算会作用在十位,百位千位a=1627731pr...原创 2019-04-16 14:31:51 · 161 阅读 · 0 评论 -
python cookbook 2.14 合并拼接字符串
#想将几个小的字符串合并为一个大的字符串。若想合并的字符串在一个序列或者iterable中,最好就是join()方法parts= ['Is', 'Chicago', 'Not', 'Chicago?']print(' '.join(parts))print(','.join(parts))print(''.join(parts))#如果只有个别str,直接可以用+连接输出。其他...原创 2019-04-15 21:04:56 · 142 阅读 · 0 评论 -
python cookbook 2.13 字符串对齐
#你想通过某种字符串对齐操作格式化字符串。基本的可使用ljust(),rjust(),center()text='hello world'print(text.ljust(20))print(text.rjust(20)) #20个字符中右对齐print(text.center(20)) #居中#这些方法可接受一个可选填充字符。print(text.rjust(2...原创 2019-04-14 11:41:40 · 161 阅读 · 0 评论 -
python cookbook 2.12 审查清理文本字符串
#文本清理问题会涉及到包括文本解析与数据处理等一系列问题。在非常简单情形下,可能会选择使用字符串函数#(str.upper(),str.lower())将文本转为标准格式。使用str.replace()或者re.sub()的简单#替换操作能删除或者改变指定的字符序列。同时可以使用2.9的unicodedata.normalize()函数将#unicode文本标准化。若你想去除整个区间上的字...原创 2019-04-14 11:37:44 · 240 阅读 · 0 评论 -
python中\t \r \s \n \f各种转移字符含义
转自:https://blog.csdn.net/xufangfang5206/article/details/80030300转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \” 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 ...转载 2019-04-14 10:33:57 · 28242 阅读 · 4 评论 -
python cookbook 2.11 删除字符串中不需要的字符
#若想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。#strip()能用于删除开始或者结尾的字符。lstrip() ,rstrip()分别从左和右执行删除操作。#默认这些方法会去除空白字符,当然你也可以指定其他字符s=' hello world \n'print(s.strip())print(s.lstrip())print(s.rstrip()) #可以自动去除空格...原创 2019-04-12 10:02:45 · 177 阅读 · 0 评论 -
python cookbook 2.10 在正则式中使用unicode
#你正在使用正则表达式处理文本,但是关注的是unicode字符串处理#默认re模块已经对一些unicode字符类有了基本支持。\\d已经匹配任意的unicode数字字符了:import renum=re.compile('\d+') #ascii 数字print(num.match('123'))print(num.match('\u0661\u0662\u0663'))#...原创 2019-04-12 10:01:17 · 123 阅读 · 0 评论 -
python cookbook 2.9 将Unicode文本标准化
#你正在处理Unicode字符串,需要确保所有字符串在底层有相同的表示#在Unicode中,某些字符能够用多个合法的编码表示。为了说明,考虑下面这个例子:s1='Spicy Jalape\u00f1o' #U+00f1s2='Spicy Jalapen\u0303o' #n后面加~,也就是U+0303字母组合print(s1)print(s2)print(s1==s2)pri...原创 2019-04-12 09:59:57 · 600 阅读 · 1 评论 -
python cookbook 2.8 多行匹配模式
#你正在用正则表达式去匹配一大块的文本,你需要跨越多行去匹配。比如你用(.)去匹配字符,忘了(.)不能匹配#换行符。比如假设想匹配c语言分割的注释:comment=re.compile(r'/\*(.*?)\*/')text1='/* this is a comment */'text2='''/* this is a multiline comment*/'''print(com...原创 2019-04-11 09:56:28 · 146 阅读 · 0 评论 -
python cookbook 2.7 最短匹配模式
#用正则匹配时可能是最长匹配模式,而你想修改它匹配最短模式。一般用来匹配一对分隔符,比如一对括号和一对引号等import restrpat= re.compile(r'\"(.*)\"')#此正则的意图是匹配被双引号包含的文本。但是*操作符是贪婪的,因此匹配操作会查找最长的可能匹配#也就是在text2中会不满足我们想要的text1='computer says "no."'print...原创 2019-04-11 09:54:34 · 159 阅读 · 0 评论