冒泡排序
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')




本文转载:CSDN博客