Python公开课第五节
来源:互联网 发布:网络时时彩赌博案量刑 编辑:程序博客网 时间:2024/05/17 06:11
文件访问与函数式编程入门
- 文本文件读写
- 二进制文件读写
- 文件和目录操作
- 序列化与反序列化
- 高阶函数
- 匿名函数
- 装饰类
- 偏函数
文本文件读写三种方法
第一种方法
直接读入
file1=open('D:\\a.txt','r')file2=open('D:\\b.txt','w')while True: line=file1.readline() #在这里可以进行逻辑操作 file2.write('"'+line+'"'+',') if not line: break#记住文件处理完,关闭文件是个好习惯file1.close()file2.close()
读文件有三种方法:
- read()将文本文件所有行读入到字符串中
- readline()是一行一行的读
- readlines()将文本文件中的所有行读入到一个list中,文本文件每一行是list的一个元素。优点:readline()可以在读行过程中跳过特定行。
第二种方法
文件迭代器,用for循环的方法
file2=open('D:\\a.txt','w')for line in open('aa.txt'): files.write('"'+line+'"'+';')file2.close()
第三种方法
文件上下文管理器
#打开文件#用with...open自带关闭文件的功能with open('D:\\a.txt','r') as f: data=f.read()#loop整个文档with open('D:\\a.txt','r') as f: for line in f: #处理每一行#写入文本with open('D:\\a.txt','w') as f: f.write(text1) f.write(text2) ...#把要打印的line写入文件中with open('D:\\a.txt','w') as f: print(line,file=f) print(line,file=f)
二进制文件读写
Python磨人的都是文件读写,要是想要读取二进制文件,需要把刚刚的‘r’改成‘rb’。
f=open('D:\\b.PNG','rb')print(f.read())#输出‘\xff\xd8\xff\xel\x00’用十六进制表示的字节
简单说就是,任何非标准的文本文件,(对于py2来说,标准时ascii,对于py3标准是Unicode),你就需要用二进制读入这个文件,你就需要用二进制读入这个文件,然后再用.decode(‘…’)的方法解码这个文件。
f=open('d:\\a.txt','rb')#读入郭德纲老师的作文,但郭老师用的是参合着错别字的繁体编码,假设叫个‘DeYuncode’#那么你读入他们就需要解码它u=f.read().decode('DeYuncode')
文件和目录操作
在图形界面的操作系统下,这个很简单就是右键/拖拽等等。在Python中咋么做?
基本操作
用Python内置的OS直接调用操作系统提供的接口。
import osos.name
'nt'
这里是通过OS告诉我们,我们操做系统的名字。如果是posix,说明系统是#nix族,如果是nt,就是Windows。
我们可以调用uname()来看看具体信息。
环境变量
在操作系统中定义的环境变量,全部保存在os.environ这个dict中,可以直接查看:
os.environ
- python装在哪
- 系统级存package的地方
- 本程序根目录
操作文件与目录
查看,创建和删除目录可以这样调用:
#当前目录的绝对路径os.path.abspath('.')#在某个目录下创建一个新的目录,#首先把新目录的完整路径表示出来:os.path.join('/Users/zhangce','haha')#这里你得到的是一个字符串,代表了新的文件夹是这个位置:/Users/zhangce/haha/#自己也可以拼起来但是怕不同操作系统下的区分符的问题,最好使用os接口#但是你并没有创建新的文件#需要用mkdir创建:os.mkdir('/Users/zhangce/haha/')#同理,删除一个文件夹os.rmdir('/Users/zhangce/haha/')
同样的道理,要拆分路径时,也不要直接拆分字符串,而是通过os.path.split()函数,这样可以吧一个路径拆分为两个部分。后一部分总是最后级别的目录或文件名:
os.path.split('/Users/zhangce/haha.avi')#('/Users/zhangce/','haha.avi')
或者靠os.path.splitext()得到文件扩展名
os.path.splitext('/Users/zhangce/haha.avi')#('/Users/zhangce/haha','.avi')
文件重命名:
os.rename('haha.avi','学习资料')
删除文件
os.remove('学习资料')
尴尬的事复制文件并不存在OS里。原因是赋值这个操作,不是由操作系统提供的。我们可以用上面的代码读入一个文件,再写入一个文件,来达到复制的目的。当然Python作为一个胶水语言,总有第三库来让我们保持stay lazy:shutil就是其中一个。基本上可以看做是OS的补充。它提供copyfile()方法,来复制你的文件:
import shutilshutil.copyfile('/path/to/file','/path/to/other/file')
这个库用起来比OS爽多了。
小例子
通过我们之前提过的方法我们来看看如何完成以下的例子:
- 列出当前目录下的所有文档
[x for x in os.listdir('.') if os.path.isdir(x)]#你会得到一个list of的文件夹
- 只想列出.py的文件
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']#列出所有.py的文件
序列化和反序列化
什么是序列化?
程序运行的过程中,所有的变量都是在内存中操作的,当程序一旦执行完毕,结束退出后,变量占有的内存被操作系统回收了。因此我们需要将某些数据持久化存储到磁盘上,下次运行从磁盘中读取就行。
我们将变量从内存中变成可存储或传输的过程称为序列,在Python中我们称为pickling,在其他语言中叫serialization,marshaling,flatting等等,说的是一个意思。反之,则为反序列化称为unpickling,把变量内容从序列化的对象重新读入到内存中。
序列化
import pickle#此处定义一个dict字典对象d=dict(name='思聪',age=29,score=80)str=pickle.dumps(d)#调用pickle的dumps进行序列化操作,返回strprint(str)#定义一个file对象,设定模式是'wb'f=open('dump.txt','wb')#将内容序列化写入到file文件中,pickle.dump(str,f)f.close()#将文件关闭
反序列化
就是把刚刚弄成的‘序列化’码转成噢Python能看得懂的object
#从之前序列化的dump.txt文件里面读取内容f=open('dump.txt','rb')#设定文件读取模式为'rb'd=pickle.load(f)#调用load做反向序列化处理过程f.close()print(d)print('name is %s'%d['name'])
稍微注意一下,Python2和Python3里面的pickle不一样。为了保证2,3的和谐,你可以用这个方法来保证你import正确:
try: import cPickle as pickleexcept ImportError: import pickle
用JSON实现序列化和反序列化
同时你也会发现,这个pickle玩的东西让人看不懂。只有Python自己可以把它unpickle回来。
如果我们有一个文件现在存下来,并且日后可以在其他地方用到的话,我们可以使用JSON来做序列化。Python的数据结构跟JSON有非常完美的兼容:
- Python公开课第五节
- Python函数第五节
- 11.7第五节课
- python爬虫第五节课及作业答案
- C#的第五节课
- c++第五节课 多态
- 第五节课 (数组)
- F28027第五节课---GPIO基础解读
- JAVA第一课第五节知识点
- python 公开课视频
- MIT python 公开课
- 第五节 实现接口
- 第五节 电能质量
- 第一章 --- 第五节
- 第二章 --- 第五节
- 第三章 --- 第五节
- 第五节 定时器使用
- php学习 第五节
- first servlet
- Windows 10系统点击任务计划程序,提示找不到远程电脑如何处理
- git常用命令总结
- 递推递归练习P
- win10安装oracle 11g 时出现INS-13001环境不满足最低要求
- Python公开课第五节
- UVa 11496
- string 字符串快速存入到二维vector中
- win10没有睡眠功能的解决方案
- 香蕉牛奶饮
- 数据结构—Problem E: 链表的基本运算(线性表)
- 深拷贝与写实拷贝----string
- Adaboost算法的原理与推导
- View的点击事件