交换两个变量的值:
(x,y) = (1,2)
(x,y) = (y,x)
数据结构操作
内嵌(inline)拷贝
由于python引用和管理模式,语句a = b 并没有对b引用的对象作拷贝,而只是对那个对象产生了新的引用。有时需要对一个对象的新的拷贝,而不是共享一个引用。如果要拷贝,可以用:
newlist = mylist[:]。可以理解为“从开始到结尾的分片”。
newDict = myDict.copy() #python1.5引入的新功能
oneDict.update(otherDict) #用另外一个字典的内容替换
拷贝:copy模块
[:]和.copy适用于90%的情况,如果拷贝对象是可变的话,就需要用到deepcopy深度拷贝功能。
文件操作
sys.stdin,sys.stdout,sys.stderr分别代表标准输入,标准输出和标准错误。
算出通过“管道”输入的文件行数
import
data = sys.stdin.readlines()
print "counted",len(data),"lines."
在unix下可以做如下测试:
# cat countlines.py | python countlines.py
Counted 3 lines.
寻找所有以#开始的行
import sys
for line in sys.stdin.readlines():
if line[0] == '#':
print line, #注意这个逗号是需要的,因为line字符串里已经有一个换行符。
取出一个文件的第四列(这里的列是由空白符定义的)
import sys,string
for line in sys.stdin.readlines():
words = string.split(line)
if len(words) >= 4:
print words[3]
取出文件的第四列,列由冒号分开,并用小写输出
import sys,string
for line in sys.stdin.readlines():
words = string.split(line,':')
if len(words) >= 4:
print string.lower(words[3])
打印头10行,最后10行,并隔行输出
import sys,string
lines = sys.stdin.readlines()
sys.stdout.writelines(lines[:10])
sys.stdout.writelines(lines[-10:])
for lineIndex in range(0,len(lines),2):
sys.stdout.write(lines[linesIndex])
计算单词'python'在文件里出现的次数
import string
text = open(fname).read()
print string.count(text,'python')
把一个文件的列变换成一个列表的行,任务是转置一个文件。
import sys,string
lines = sys.stdin.readlines()
wordlists = []
for line in lines:
words = string.split(line)
wordlists.append(words)
for row in range(len(wordlists[0])):
for col in range(len(wordlists)):
print wordlists[col][row] + '/t',
print
逐字地读入
while 1:
next = sys.stdin.read(1) #读入一个单字符串
if not next: #或者读到EOF时是空串
break
处理字符串'next'
逐行地读入
while 1:
next = sys.stdin.readline() #读入一个单行字符串
if not next :
break
处理行'next'
处理命令行上指定的一组文件,用sys模块的argv属性
处理一个或多个文件的每一行:fileinput模块
匹配一组文件:glob模块
使用临时文件,tempfile模块的mktemp(),TemporaryFile()函数。
操用程序,调用系统和功能。os.popen以一个shell命令字符串作为参数,并返回一个链接到标准输入或标准输出的文件对象。string.find在一个字符串里从左到右地找一个子串,并返回一个位置索引。
python提供了大量internet的工具使我们可以简单地操作web。