冒泡排序
apply()函数实现调用可变参数列表的函数,把函数的参数放在一个元祖或序列中
声明形式:
apply(func[,args[,kwargs])
func:自定义的函数
args:包含自定义函数的参数的一个序列或者元祖,如果省略,则代表自定义函数没有参数
kwargs:是一个字典,其中key是自定义函数的参数名称,value是实际的值
filter():可以对序列进行过滤,对自定义函数的返回结果为真来过滤
声明形式:
filter(func,sequence)
reduce(func,sequence[,initial]):对序列进行连续操作需要循环处理
如果initial不为空,先讲inaitial传入fun中计算
Generator函数
生成器(Generator)的作用是一次产生一个数据项并把数据项输出,
Generator函数定义:
def 函数名(参数列表):
。。。
yield 表达式
Generator函数定义和普通函数定义没有什么区别,只需要函数体内使用yield生成数据项即可
Generator函数可以被for循环遍历
而且可以通过next()方法获得yield生成的数据项
return和yeild区别
return返回语句后,成语终止执行,而yield返回值后程序继续往后执行
读取文件内容
写入文件
删除文件
文件的拷贝功能
文件重命名
python的流对象
python把文件的处理和流关联在一起,流对象实现了File类的所有方法,sys模块提供了3种基本的流对象——stdin、stdout。stderr
这三个对象分别表示标准输入、标准输出、错误输出
流对象可以使用File类的属性和方法、流对象的处理和文件的处理方式相同
1、stdin:表示流的标准输入
#通过流对象stdin读取文件内容
#2、stdout:表示流的标准输出
#stdin是把程序运行后的结果输出到控制台,而stdout重定向输出,把输入的结果保存到文件中
#3、stderr:用于记录输入异常信息,通过stderr可以实现日志文件的功能
#当前目录文件内容为空,则在日志文件中记录异常信息,如果不为空,记录正确信息
#通过输入、输出流对象读写文件
#通过生成器Generator函数
Python中的print默认是换行的
想要不换行输出有两种办法:
1.print后加上","
>>>print "Hello World",
2.使用sys.stdout.write命令
>>>sys.stdout.write("Hello World")
'''
def bubbleSort(numbers):
i = 0
while i < len(numbers)-1:
for j in range(i+1,len(numbers)):
if numbers[i] > numbers[j]:
numbers[i],numbers[j] = numbers[j],numbers[i]
i = i+1
print(numbers)
bubbleSort([5,1,34,12,32,109,2,0])
apply()函数实现调用可变参数列表的函数,把函数的参数放在一个元祖或序列中
声明形式:
apply(func[,args[,kwargs])
func:自定义的函数
args:包含自定义函数的参数的一个序列或者元祖,如果省略,则代表自定义函数没有参数
kwargs:是一个字典,其中key是自定义函数的参数名称,value是实际的值
def sum(x=1,y=2):
return x+y
print(apply(sum,(1,34)))
filter():可以对序列进行过滤,对自定义函数的返回结果为真来过滤
声明形式:
filter(func,sequence)
def func(x):
if x > 0:
return x
print(filter(func,range(-9,10)))
reduce(func,sequence[,initial]):对序列进行连续操作需要循环处理
如果initial不为空,先讲inaitial传入fun中计算
def sum1(x,y):
return x+y
print(reduce(sum1,range(0,10)))
print(reduce(sum1,range(0,10),10))
print(reduce(sum1,range(0,0),10))
Generator函数
生成器(Generator)的作用是一次产生一个数据项并把数据项输出,
Generator函数定义:
def 函数名(参数列表):
。。。
yield 表达式
Generator函数定义和普通函数定义没有什么区别,只需要函数体内使用yield生成数据项即可
Generator函数可以被for循环遍历
而且可以通过next()方法获得yield生成的数据项
def func(n):
for i in range(n):
yield i
for i in func(3):
print i
r = func(3)
print(r.next())
print(r.next())
print(r.next())
print(r.next())#由于生成数值3后已经没有数据可生成,所以跑出StopIteration异常
return和yeild区别
return返回语句后,成语终止执行,而yield返回值后程序继续往后执行
def func_return(n):
for i in range(n):
return i
def func_yeild(n):
for i in range(n):
yield i
print(func_return(3))#结果只会输入0
for i in func_yeild(3):
print i
字符串翻转def strReverve_one(str):
otr = ""
li = list(str)#将字符串化为列表
for i in range(len(str),0,-1):
otr = otr + "".join(li[i-1])
return otr
def strReverve_two(str):
otr = ""
li = list(str)
li.reverse( )
otr = otr + "".join(li)
return otr
def strReverve_three(str):
return str[::-1]
print(strReverve_one('hello'))
print(strReverve_two('hello'))
print(strReverve_three('hello'))
import re
'''
匹配形如区号为3位的8位电话/区号为4位的7位电话,书写的时候区号和本地号码以‘-’连接,或者在区号两侧添加‘()’,同时也支持区号和电话连在一起写,或者只有电话号码,
'''
numString = '''ahsdasd 123-12345678,jsdnasasjdajd(321)-12345678.aksdasdaks:12345678.asdaskdaahsdasd 12312345678,jsdnasasjdajd(321)12345678,
ahsdasd 1234-1234567,jsdnasasjdajd(4321)-1234567.aksdasdaks:1234567.asdaskdaahsdasd 12341234567,jsdnasasjdajd(4321)1234567'''
phoneNumber = re.compile(r'(\d{3}|\(\d{3}\))?(-)?(\d{8})|(\d{4}|\(\d{4}\))?(-)?(\d{7})')
#只匹配一条(第一条)
print(phoneNumber.search(numString).group())
#匹配所又,并循环打印
print(phoneNumber.findall(numString))
for i in range(len(phoneNumber.findall(numString))):
print(reduce(sum1,phoneNumber.findall(numString)[i]))
字符串替换
numString1 = re.compile(r'[a]').sub('XX',numString)#返回替换后的字符串,不在原字符串上替换
print(numString1)
numString2 = re.compile(r'[a]').subn('XX',numString) #返回一个2元的元祖,第一个是替换结果,第二个是替换的次数
print(numString2)
numString3 = phoneNumber.split(numString)
print(numString3)
读取文件内容
import os
#1、单行读取方式readline()
openTxt = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\shuoming.txt','r')
while True:
line = openTxt.readline()
if line:
print(line.decode('gbk').encode('utf-8'))
else:
break
openTxt.close()
#2、多行读取方式readlines()
openTxt1 = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\shuoming.txt','r')
lines = openTxt1.readlines()
for line in lines:
print(line.decode('gbk').encode('utf-8'))
openTxt1.close()
#3、一次性读取方式read()
openTxt2 = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\shuoming.txt','r')
lines = openTxt2.read()
print(lines.decode('gbk').encode('utf-8'))
openTxt2.close()
写入文件
#write()写入,(w+方式先删除文件内容后写入,a+是直接在文件内容后面写入)
openTxt3 = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\hello.txt','w+')
openTxt3.write('hello world!')
openTxt3.close()
#writelines()将列表的内容写入,(w+方式先删除文件内容后写入,a+是直接在文件内容后面写入)
openTxt4 = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\hello.txt','w+')
line1 = ['hello!','xiaoming']
openTxt4.writelines(line1)
openTxt4.close()
删除文件
if os.path.exists('C:\\Users\\Administrator\\Desktop\\python_lianxi\\1.txt'):
os.remove('C:\\Users\\Administrator\\Desktop\\python_lianxi\\1.txt')
文件的拷贝功能
openTxt5 = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\shuoming.txt','r')
openTxt6 = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\shuoming_fuben.txt','w+')
openTxt6.write(openTxt5.read())
openTxt5.close()
openTxt6.close()
文件重命名
li = os.listdir('.')
print(li)
if 'hello.txt' in li:
os.rename('hello.txt', 'world.txt')
elif 'world.txt' in li:
os.rename( 'world.txt','hello.txt')
python的流对象
python把文件的处理和流关联在一起,流对象实现了File类的所有方法,sys模块提供了3种基本的流对象——stdin、stdout。stderr
这三个对象分别表示标准输入、标准输出、错误输出
流对象可以使用File类的属性和方法、流对象的处理和文件的处理方式相同
1、stdin:表示流的标准输入
#通过流对象stdin读取文件内容
import sys
sys.stdin = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\hello.txt','r')
#等价于print(sys.stdin.read())
for line in sys.stdin.readlines():
print(line)
sys.stdin.close()
#2、stdout:表示流的标准输出
#stdin是把程序运行后的结果输出到控制台,而stdout重定向输出,把输入的结果保存到文件中
sys.stdout = open(r'C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study\\1.txt','a')
print('zhangsan and lisi nimenhao!!')
sys.stdout.close()
#3、stderr:用于记录输入异常信息,通过stderr可以实现日志文件的功能
#当前目录文件内容为空,则在日志文件中记录异常信息,如果不为空,记录正确信息
import datetime,time
sys.stderr = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study\\loginfo.txt','a')
f_name = open('C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study\\2.txt','r')
t_time = datetime.datetime.now().strftime('%Y/%m/%d %I:%M:%S')#将返回Unix纪元时间戳,通过time。strftime格式化
t1_time = time.strftime('%Y/%m/%d %I:%M:%S',time.localtime())#将返回Unix纪元时间戳,通过datetime模块strftime格式化
context = f_name.read()
if context:
sys.stderr.write(t_time + ' ' + context)
sys.stderr.write(t1_time + ' ' + context)
else:
raise Exception,t1_time + '异常信息'
#通过输入、输出流对象读写文件
#将文件1.txt中文件内容读取出来并写入2.txt
#读取文件中内容
def fileInputStream(filepath):
f = open(filepath,'r')
context1 = f.read()
f.close()
print(context1)
return context1
#写入新文件
def fileOutputStream(filepath,context1):
f = open(filepath,'a')
f.write(context1)
f.close()
fileOutputStream('C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study\\2.txt',fileInputStream('C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study\\1.txt'))
#通过生成器Generator函数
#读取文件中内容
def fileInputStream_Generator(filepath):
try:
f = open(filepath,'r')
for line in f:
for byte in line:
yield byte
except StopIteration,e:
f.close()
return
#写入新文件
def fileOutputStream_Generator(inputstream,filepath):#参数生成器、写入文件路径
try:
f = open(filepath,'a')
while True:
byte = inputstream.next()
f.write(byte)
except StopIteration,e:
f.close()
return
fileOutputStream_Generator(fileInputStream_Generator('C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study\\1.txt'),'C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study\\3.txt')
Python中的print默认是换行的
想要不换行输出有两种办法:
1.print后加上","
>>>print "Hello World",
2.使用sys.stdout.write命令
>>>sys.stdout.write("Hello World")
'''
#打印目录下文件属性
def show_file(path):
'''显示文件目录下文件属性,包括文件名、大小,创建时间,修改时间、最后访问时间'''
import os,time
import datetime
for dirname,pathname,filenames in os.walk(path):
for filename in filenames:
print(os.path.join(dirname,filename)),
state = os.stat(os.path.join(dirname,filename))#返回文件的属性列表,参数必须是绝对路径
print(' 文件大小: '+ str(int(state[-4]))),
print('创建时间:'+ time.strftime('%Y/%m/%d %I:%M:%S',time.localtime(state[-1]))),#将返回Unix纪元时间戳,通过time。strftime格式化
print('最后修改时间:'+ datetime.datetime.fromtimestamp(state[-2]).strftime('%Y/%m/%d %I:%M:%S')),#将返回Unix纪元时间戳,通过datetime模块strftime格式化
print('最后访问时间:'+ datetime.datetime.fromtimestamp(state[-3]).strftime('%Y/%m/%d %I:%M:%S')),
print('')
show_file('C:\\Users\\Administrator\\Desktop\\python_lianxi\\learning\\study')