A Byte of Python 笔记(12)python 标准库:sys、os,更多内容
第14章 python 标准库
Python标准库是随Python附带安装的,它包含大量极其有用的模块。
sys 模块
sys 模块包含系统对应的功能。如 sys.argv 列表包含命令行参数。
# -*- coding: utf-8 -*-
# Filename: cat.py import sys def readfile(filename):
'''print a file to the standard output.'''
f = file(filename)
while True:
line = f.readline()
if len(line) == 0:
break
print line, # notice comma
f.close() # script starts from here
if len(sys.argv) < 2:
print 'No action specified.'
sys.exit() if sys.argv[1].startswith('--'):
option = sys.argv[1][2:]
# fetch sys.argv[1] but without the first two characters
if option == 'version':
print 'Version 1.2'
elif option == 'help':
print '''\
This program prints files to the standard output.
Any number of files can be specified.
Options include:
--version : prints the version number
--help : display this help'''
else:
print 'Unknown option.'
sys.exit()
else:
for filename in sys.argv[1:]:
readfile(filename)
os 模块
该模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行。一个例子就是使用 os.sep 可以取代操作系统特定的路径分割符。
下面列出了一些在os模块中比较有用的部分。
- os.name 字符串指示你正在使用的平台。比如对于 Windows,它是 'nt',而对于 Linux/Unix 用户,它是 'posix'。
- os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径。
- os.getenv() 和 os.putenv() 函数分别用来读取和设置环境变量。
- os.listdir() 返回指定目录下的所有文件和目录名。
- os.remove() 函数用来删除一个文件。
- os.system() 函数用来运行 shell 命令。
- os.linesep字符串给出当前平台使用的行终止符。例如,Windows 使用 '\r\n',Linux 使用 '\n' 而 Mac 使用 '\r'。
- os.path.split() 函数返回一个路径的目录名和文件名。
>>> os.path.split('/home/swaroop/byte/code/poem.txt')('/home/swaroop/byte/code', 'poem.txt')
- os.path.isfile() 和 os.path.isdir() 函数分别检验给出的路径是一个文件还是目录。类似地,os.path.existe() 函数用来检验给出的路径是否真地存在。
第15章 更多python内容
特殊方法
在类中有一些特殊的方法具有特殊的意义,比如 __init__ 和 __del__ 方法。特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用 x[key] 这样的索引操作(就像列表和元组一样),那么你只需要实现 __getitem__() 方法就可以了。
名称 |
说明 |
__init__(self,...) |
这个方法在新建对象要被返回使用之前被调用。 |
__del__(self) |
在对象要被删除之前调用。 |
__str__(self) |
在我们对对象使用 print 语句或是使用 str()的时候调用。 |
__lt__(self,other) |
当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。 |
__getitem__(self,key) |
使用 x[key]索引操作符的时候调用。 |
__len__(self) |
对序列对象使用内建的 len()函数的时候调用。 |
单语句块
每一个语句块是通过缩进层次与其它块区分开来。但如果语句块只包含一个语句,可以在条件语句或循环与语句的同一行指明它。
>>> flag = True
>>> if flag: print 'Yes'
...
Yes
单个语句被直接使用而不是作为一个独立的块使用。虽然这样做可以使你的程序变得 小一些 ,但是除了检验错误之外不建议使用这种缩略方法。
列表综合
通过列表综合,可以从一个已有的列表导出一个新的列表。
# -*- coding: utf-8 -*-
# Filename: list_comprehension.py listone = [2,3,4]
listtwo = [2*i for i in listone if i>2]
print listtwo
我们为满足条件(if i > 2)的数指定了一个操作(2*i),从而导出一个新的列表。
在函数中接收元组和列表
当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。
>>> def powersum(power, *args):
... '''Return the sum of each argument raised to specified power.'''
... total = 0
... for i in args:
... total += pow(i, power) # pow(i,power)=i**power
... return total
...
>>> powersum(2,3,4) # power=2,args=(3,4)
25 # 3**2 + 4**2
>>> powersum(2,10) # power=2,args=(10,)
100 # 10**2
由于在 args 变量前有*前缀,所有多余的函数参数都会作为一个元组存储在 args 中。如果使用的是 ** 前缀,多余的参数则会被认为是一个字典的键/值对。
lambda形式
lambda语句被用来创建新的函数对象,并且在运行时返回它们。
# -*- coding: utf-8 -*-
# Filename: lambda.py def make_repeater(n):
return lambda s: s*n twice = make_repeater(2) print twice('word')
print twice(5)
make_repeater 函数在运行时创建新的函数对象,并且返回它。lambda 语句用来创建函数对象。本质上,lambda 需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新的函数返回。
注意,即便是 print 语句也不能用在 lambda 形式中,只能使用表达式。
exec 和 eval 语句
exec 语句用来执行储存在字符串或文件中的 python 语句。如,可以在运行时生成一个包含 python 代码的字符串,然后使用 exec 语句执行。
>>> exec 'print"Hello World"'
Hello World
eval 语句用来计算存储在字符串中的有效 python 表达式。
>>> eval('2*3')
6
assert 语句
assert 语句用来声明某个条件是真的。如,如果你非常确信某个列表中至少有一个元素,而你想要检验这一点,并在它非真的时候引发一个错误,那么 assert 语句是应用在这种情况下的理想语句。当 assert 语句失败时,引发 AssertionError。
>>> mylist = ['item']
>>> assert len(mylist) >= 1
>>> mylist.pop()
'item'
>>> assert len(mylist) >= 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
repr 函数
repr 函数用来取得对象的规范字符串表示。反引号(转换符)可以完成相同的功能。
注意,大多数时候 eval(repr(object)) == object
>>> i = []
>>> i.append('item')
>>> `i`
"['item']"
>>> repr(i)
"['item']"
基本上,repr 函数和反引号用来获取对象的可打印的表示形式。可以通过定义的 __repr__ 方法来控制你的对象在被 repr 函数调用的时候返回的内容。
A Byte of Python 笔记(12)python 标准库:sys、os,更多内容的更多相关文章
- Python学习笔记12:标准库之对象序列化(pickle包,cPickle包)
计算机的内存中存储的是二进制的序列. 我们能够直接将某个对象所相应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),然后将文本流存入到文件里. 因为Python在创建对象时,要參考 ...
- Python学习笔记16:标准库多线程(threading包裹)
Python主要是通过标准库threading包来实现多线程. 今天,互联网时代,所有的server您将收到大量请求. server要利用多线程的方式的优势来处理这些请求,为了改善网络port读写效率 ...
- Python学习笔记8:标准库之正則表達式
Python拥有强大的标准库.从如今起,開始学习标准库中提供的一些经常使用功能. 首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pa ...
- python代码规范与标准库参考
python代码规范与标准库参考 python代码规范参考文献: http://www.runoob.com/w3cnote/google-python-styleguide.html https:/ ...
- python基础教程_学习笔记14:标准库:一些最爱——re
标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...
- python基础课程_学习笔记15:标准库:有些收藏夹——fileinput
标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...
- python基础课程_学习笔记13:标准库:有些收藏夹——sys
标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...
- python基础课程_学习笔记20:标准库:有些收藏夹——os
标准库:有些收藏夹 os os模块为您提供访问多个操作系统服务特征. os和它的子模块os.path还包含一些用于检查.构造.删除文件夹和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和 ...
- python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...
- Python学习笔记13:标准库之子进程(subprocess包)
ubprocess包主要功能是运行外部的命令和程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及经常使用的封装函数 当我们执行python的时候,我们都是在 ...
随机推荐
- php导出CSV时,超长数字精度丢失问题与前导0的字符串丢失0的问题解决
php生成的CSV有时候会遇到两个特殊情况: 1.输出的字段中,含有超长数字(18位的数字)比方身份证:122121197410180016,就算输出时字段加上"",还是会被识别成 ...
- ToolStripMenuItem控件实现DatagridView行的上下移
/*--------------行上移------------------*/ 1 private void 上移ToolStripMenuItem_Click(object sender, Even ...
- [转]oracle误删数据的恢复
与数据打交道,免不了会误删一些数据,之后还commit了,连回滚的机会都没了,而更糟糕的是你又没有备份,这种事终于在今天被我不幸的遇上了... 唯一一点值得欣慰的是,我删除表记录的时候,时间不长,一天 ...
- iOS7 NavigationController 右滑手势问题
苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecogni ...
- JAVA编译中拒绝访问的问题及解决方案
在java编译时出现,可以将C盘内的文件转移到其他盘,此问题可能是权限不足不能够读取C盘文件造成的. 文件名与类名要一致,包括大小写,也是要一致!
- 【转载】谈谈Cookie
0×00 引言 在Web技术的发展史上,Cookie技术的出现是一次重大的 变革.但是, Cookie技术又是一项非常有争议的技术,从它诞生之日起就成了广大网络用户和Web开发人员的一个争论焦点,原因 ...
- 在Java SE中使用Hibernate处理数据
如今,Hibernate正在迅速成为非常流行的(如果不是最流行的)J2EE O/R映射程序/数据集成框架.它为开发人员提供了处理企业中的关系数据库的整洁.简明且强大的工具.但如果外部需要访问这些已被包 ...
- 关于Google指令(别提baidu)
关于google指令 关于google指令 google为我们准备好了的"指令"(directive),可以最大限度帮助我们完成每一次搜索.这些指令其实就是一个个关键字,能让我们从 ...
- (Problem 39)Integer right triangles
If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exact ...
- Git-常用命令集合
该文章会陆续添加内容,学习网页来自http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 ...