python基础

来源:互联网 发布:摩尔气体常数实验数据 编辑:程序博客网 时间:2024/06/07 07:03

一、文件操作

1、打开文件 全部读到内存 内存搜索--查开房

fop  =open(r"C:\aa.txt","r")lines =fop.readlines()   # 读取所有到list 一次读取很大的文件,很卡很慢,集合上限,print linesfop.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 osimport  os.pathpath=r"C:\hello"def  eachfile(filepath):    pathdir=os.listdir(filepath)    for  alldir in  pathdir:        filechild=os.path.join('%s%s' % (filepath, alldir) )        print filechildeachfile(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)+numprint  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.txtos.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  timeimport  calendarticks=time.time()print  ticks  #时间戳  ,距离1970.1.1多少秒  1488902547.0localtime=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  timei=0while (True):    print "时间过了"+str(i)+"秒"    time.sleep(0.1) #实数     每休眠1s    i+=1
4、设计倒计时,每10s提醒一次
import  datetimeimport  timewhile  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通用的类    passdef  set_name(self,name):#外部方法 不是类内部的方法    self.name=nameprint  type(Student)s=Student()s.name="china"  #动态增加属性,本来没有属性,动态添加print  s.names.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发挥作用,    passt=  teacher()   #只有该可以正常打印t.name="ak47"print t.namet.id=123print t.idt.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 / 0except ZeroDivisionError:       #Error会有提示    print "不能为0"except:    print "其他异常"

2、自定义错误  assert

t =[ ]       #列表   t =[1,2]assert  len(t) >=1  #测试自己程序错误,编译的时候检查# month=13# assert 1<=month <=12 ,"你的脑子进水了


七、多线程

1、# 实现每秒中打印一次时间

import  timeimport  threaddef  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))  #延时1sthread.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  sysprint sys.getdefaultencoding()  # Python默认编码格式:asciiprint  "你好"  #asciiprint  u"你好"  #unicode 宽字符

2、显示设置utf-8

import  sysreload(sys)sys.setdefaultencoding("utf-8")print sys.getdefaultencoding()  #ascii 默认编码格式仍是 字符串编码                                #这样显示设置了之后是utf-8

3、读文件
3.1正常的读

fop =open(r"c:\1.txt","r")while True:    line=fop.readline().decode("gb2312","ignore")  #读取ANSI文件    print line    if not line:        break

3.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  codecsf=codecs.open(r"Z:\C\360CloudUI\dangdangwang.txt","rb","gbk","ignore")#有垃圾字符忽略while True:    line=f.readline()    print line    if not line:        break

3.3读取:utf-16  unicode

import  codecsf=codecs.open(r"Z:\C\360CloudUI\unicode.txt","rb","utf-16")#utf-16读取unicodewhile 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+1print  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+1fibdata=fibx(6)print  fibdataprint  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 Mylist

3.2

Mylist1  =[]for  data in range(1,20):   #循环    Mylist1.append(data*data)print Mylist1

3.3

Mylist2=[x+2  for  x  in range(1,10)]  #生成数据高级语法 打印3-11print Mylist2Mylist3=[x+x  for  x  in range(1,10)]  #生成数据高级语法print Mylist3Mylist5=[x+x  for  x  in range(1,10)  if not x%2==0  ]  #生成数据高级语法print Mylist5

3.4

Mylist6=[m+n+"123"  for m  in  "abcd"  for  n  in  "xyzs" ] #双层  ['ax123', 'ay123', 'az123', 'as123'...print Mylist6Mylist7=[m+n+s  for m  in  "abcd"  for  n  in  "xyzs"  for s in "uiop" ] #双层print Mylist7
4、实现自定义简单的mapreduce

def  f(x):    return x*xmylist=map(f,range(1,10))   #多线程,map针对数据单独操作print  mylistdef  add(x,y):    return x+y# print   reduce(add,range(1,101))  #5050print   reduce(add,mylist)  #针对数据归并操作

与lambda自定义

# 1-》10     *3+1     addprint  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 axprint add(1,2)print add(1,2,3,4)
结合lambda
func=lambda x,y: x+yprint 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 0print   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 keyfor  ch in "abcdefg":    print chfor  x,y  in [(1,2),(2,3),(3,4),(4,5)]:    print x,yMyList=["a","b","c","d"]for i,value in enumerate(MyList): #枚举索引,值  类似于键值    print i ,value
8、列表

Mylist= range(100)  #范围 打印0 --100print Mylist                    #注:取不到最后一个print Mylist[:10] #从0到10print Mylist[10:20]  #从10到20  10 -19,取不到20print Mylist[10:30]#从10到30print 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到3print  Mytuple[0:4:2]#从0到4,步长2MyString="abcdefghigklmn"print  MyString[:3]     #从0到3print  MyString[3:13]print  MyString[::2]print  MyString[::1]print  "----------------------"#print  MyString[::0]  #步长为0,不输出print MyString[::-1]print 99print MyString[::-2]    #从结束到开始,每一个取2个print   Mylist[::-1] #从结束到开始,每一个取一个





0 0