一、文件操作
1、打开文件 全部读到内存 内存搜索--查开房
fop =open(r"C:\aa.txt","r") lines =fop.readlines() # 读取所有到list 一次读取很大的文件,很卡很慢,集合上限, print lines fop.close()2、一次读一行进行判断 硬盘搜索--查开房 fop =open(r"C:\aa.txt","r") while True: line=fop.readline() #读取一行 if line.find("a")!=-1: #查找 print line if not line: #字符串为空退出 break注:文本默认是utf-8,如果是ANSI先解码,再编码 line=fop.readline().decode("gb2312").encode("utf-8") #读取一行
二、遍历文件目录
1、遍历文件夹 只能遍历文件下的一级目录
import os import os.path path=r"C:\hello" def eachfile(filepath): pathdir=os.listdir(filepath) for alldir in pathdir: filechild=os.path.join('%s%s' % (filepath, alldir) ) print filechild eachfile(path)2、遍历文件夹下的各层文件 def getallfileandpath (filepath): parents =os.listdir(filepath) for parent in parents: child=os.path.join(filepath,parent) if os.path.isdir(child): #是文件夹递归调用,打印是文件夹 getallfileandpath (child) print (child+"文件夹") else: #是文件直接打印文件名 print (child+"文件")3、应用模型-递归调用
def add100( num): if num == 0: return 0 else: return add100(num-1)+num print add100(100)三、文件操作 1、增删重命名查询
import os 获得当前目录 print os.path.abspath('.') 创建文件夹 os.mkdir(r"C:\123") 删除文件夹 os.rmdir(r"C:\123") 删除文件夹 os.remove(r"c:\2.txt") 把1.txt重命名为2.txt os.rename(r"c:\1.txt",r"c:\2.txt") #所有文件 print [ x for x in os.listdir("D:\\") ] 当前目录所有文件 print [ x for x in os.listdir(".") ] 列举当前目录 print [ x for x in os.listdir(".") if os.path.splitext(x)[1]=='.py' ]2、筛选器 print filter( lambda x: x%2==1,range(0,101)) #奇数 print filter( lambda x: x%2==0,range(0,101)) #偶数 Mylist =['A','',' ',None,'','B'] print filter( lambda strs : strs and strs.strip() ,Mylist) #['A', 'B']四、时间操作 1、格式化时间
import time import calendar ticks=time.time() print ticks #时间戳 ,距离1970.1.1多少秒 1488902547.0 localtime=time.localtime(ticks) #转化为本地时间 localtime=time.asctime(localtime) print localtime #打印本地时间格式化 Wed Mar 08 00:02:27 2017 #格式化时间 print time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) #2017-03-08 00:02:27 2、打印日历 cal=calendar.month(2017,3) print cal # March 2017 # Mo Tu We Th Fr Sa Su # 1 2 3 4 5 # 6 7 8 9 10 11 12 # 13 14 15 16 17 18 19 # 20 21 22 23 24 25 26 # 27 28 29 30 31 3、定时任务 import time i=0 while (True): print "时间过了"+str(i)+"秒" time.sleep(0.1) #实数 每休眠1s i+=14、设计倒计时,每10s提醒一次 import datetime import time while True: baby = datetime.datetime(2017, 6, 7, 9, 0, 0) # 高考倒计时 today = datetime.datetime.now() # 今天日期 day = (baby - today).days # 剩下几天 # print day seconds = (baby - today).seconds # 一共多少秒 sec = seconds % 60 # 剩下的秒 min = seconds / 60 % 60 # 一共多少分钟 hour = seconds / 3600 # 小时 if hour > 24: hour -= 24 day += 1 print "剩下%d天%d小时%d分钟%d秒" % (day, hour, min, sec) time.sleep(10) #每10秒提示一次五、类
1、动态增加属性
from types import MethodType #从type命名空间载入这个方法 class Student: #object通用的类 pass def set_name(self,name):#外部方法 不是类内部的方法 self.name=name print type(Student) s=Student() s.name="china" #动态增加属性,本来没有属性,动态添加 print s.name s.set_name=MethodType(set_name,s,Student)#动态载入方法,set_name方法,s对象,stfuent类型 s.set_name("hjk") #调用动态增加的方法 print s.name 2、使其只能引用自身属性,不能添加别的属性 前提继承object class teacher(object): __slots__ =('name') #__slots__限定增加属性,需要继承object发挥作用, pass t= teacher() #只有该可以正常打印 t.name="ak47" print t.name t.id=123 print t.id t.stunum="123x" print t.stunum六、异常与错误
1、异常与finally的使用
try: f=file("hello.txt","r") print"read file" except IOError: print "文件不存在" except: print "其他异常" finally: f.close() #关闭文件,异常最终执行 try: num = 10 / 0 except ZeroDivisionError: #Error会有提示 print "不能为0" except: print "其他异常" 2、自定义错误 assert t =[ ] #列表 t =[1,2] assert len(t) >=1 #测试自己程序错误,编译的时候检查 # month=13 # assert 1<=month <=12 ,"你的脑子进水了
七、多线程
1、# 实现每秒中打印一次时间
import time import thread def mythread (name,delay): count=0 while True: count +=1 time.sleep(delay) print "%s,%s" % (name,time.ctime(time.time())) #打印延时和当前时间 thread.start_new_thread(mythread,("th1",1)) #延时1s thread.start_new_thread(mythread,("th2",2)) while True: #主线程不退出 pass 2、进程操作 import subprocess #进程 Popen打开一个线程 运行在进程中的线程 pingP= subprocess.Popen(args='ping -n 4 www.taobao.com',shell=True) #运行在进程中的线程 pingP.wait() #等待 # print pingP.stdout.read() #输出信息 print pingP.pid #线程编号 print pingP.returncode #线程返回值八、处理中文乱码
1、 Python默认编码格式:ascii
-*- coding: UTF-8 -*- 只是保存py文件的编码 #!/usr/bin/python # -*- coding: UTF-8 -*- #你好- coding: UTF-8 保存py文件的编码 import sys print sys.getdefaultencoding() # Python默认编码格式:ascii print "你好" #ascii print u"你好" #unicode 宽字符2、显示设置utf-8
import sys reload(sys) sys.setdefaultencoding("utf-8") print sys.getdefaultencoding() #ascii 默认编码格式仍是 字符串编码 #这样显示设置了之后是utf-83、读文件 3.1正常的读
fop =open(r"c:\1.txt","r") while True: line=fop.readline().decode("gb2312","ignore") #读取ANSI文件 print line if not line: break3.2读取ANSI文件,gbk gb2312 如果出现异常,错误信息忽略
fop =open(r"c:\1.txt","r") while True: line=fop.readline().decode("gb2312","ignore") #读取ANSI文件,gbk gb2312 如果出现异常,错误信息忽略 if line.find("嘿嘿") !=-1 : #搜索34 print line if not line: break同下读,读的时候直接设定编码:
import codecs f=codecs.open(r"Z:\C\360CloudUI\dangdangwang.txt","rb","gbk","ignore")#有垃圾字符忽略 while True: line=f.readline() print line if not line: break3.3读取:utf-16 unicode
import codecs f=codecs.open(r"Z:\C\360CloudUI\unicode.txt","rb","utf-16")#utf-16读取unicode while True: line=f.readline() print line if not line: break九、一些基础知识点儿汇总
1、生成器--顺序执行,一段工作,每段工作包含数据与行为, yield存储数据结果 1.1实现斐波那契
def fib(data): n,a,b=0,0,1 # n=0 a=0 b =1 while n<data: print b a,b=b,a+b # a=b, b=a+b n=n+1 print fib(6)1.2简单生成器应用 def fibx(data): n,a,b=0,0,1 # n=0 a=0 b =1 while n<data: yield b #产出,加入链表 a,b=b,a+b # a=b, b=a+b n=n+1 fibdata=fibx(6) print fibdata print fibdata.next() print fibdata.next() print fibdata.next() print fibdata.next() print fibdata.next()2、高阶函数,函数作为另外个函数的参数,这个函数为高阶函数 def add(x,y,z): return z(x)+z(y) print add(-4,10,abs)3、数组高级用法3.1
Mylist =range(1,20 ) #范围 print Mylist3.2
Mylist1 =[] for data in range(1,20): #循环 Mylist1.append(data*data) print Mylist13.3
Mylist2=[x+2 for x in range(1,10)] #生成数据高级语法 打印3-11 print Mylist2 Mylist3=[x+x for x in range(1,10)] #生成数据高级语法 print Mylist3 Mylist5=[x+x for x in range(1,10) if not x%2==0 ] #生成数据高级语法 print Mylist53.4
Mylist6=[m+n+"123" for m in "abcd" for n in "xyzs" ] #双层 ['ax123', 'ay123', 'az123', 'as123'... print Mylist6 Mylist7=[m+n+s for m in "abcd" for n in "xyzs" for s in "uiop" ] #双层 print Mylist74、实现自定义简单的mapreduce def f(x): return x*x mylist=map(f,range(1,10)) #多线程,map针对数据单独操作 print mylist def add(x,y): return x+y # print reduce(add,range(1,101)) #5050 print reduce(add,mylist) #针对数据归并操作 与lambda自定义 # 1-》10 *3+1 add print reduce(lambda x,y:x+y,map(lambda x :3*x+1,range(1,11))) 5、可变参数 def add(*args): #可变参数 ax=0 for n in args: ax+=n return ax print add(1,2) print add(1,2,3,4)结合lambda func=lambda x,y: x+y print func(1,2)6、sorted排序 print sorted([41,9,2,8,3,7,21,6,5]) #默认对于数据排序 从小到大 mylist=[41,9,2,8,3,7,21,6,5] print sorted(mylist) #默认对于数据排序 从大到小排序 def revesedsorted(x,y): if x>y: return -1 if x<y: return 1 return 0 print sorted(mylist,revesedsorted) # 字典排序 mystrlist=['abc','xyz','bsx','Acd'] print sorted(mystrlist,revesedsorted)7、字典 Mydict= {"a":1,"b":2,"c":3} for key in Mydict: print key for ch in "abcdefg": print ch for x,y in [(1,2),(2,3),(3,4),(4,5)]: print x,y MyList=["a","b","c","d"] for i,value in enumerate(MyList): #枚举索引,值 类似于键值 print i ,value8、列表 Mylist= range(100) #范围 打印0 --100 print Mylist #注:取不到最后一个 print Mylist[:10] #从0到10 print Mylist[10:20] #从10到20 10 -19,取不到20 print Mylist[10:30]#从10到30 print Mylist[10:30:2] #从10到30,步长2,每两个取一个 print Mylist[:] print Mylist[::5] #从0-100,每五个选一个 Mytuple=(1,2,3,4,5,6,7) print Mytuple[:3]#从0到3 print Mytuple[0:4:2]#从0到4,步长2 MyString="abcdefghigklmn" print MyString[:3] #从0到3 print MyString[3:13] print MyString[::2] print MyString[::1] print "----------------------" #print MyString[::0] #步长为0,不输出 print MyString[::-1] print 99 print MyString[::-2] #从结束到开始,每一个取2个 print Mylist[::-1] #从结束到开始,每一个取一个