FishC笔记—28 讲 文件:因为懂你,所以更永恒
来源:互联网 发布:热仿真软件flotherm 编辑:程序博客网 时间:2024/06/06 09:13
本期内容详解:
1、利用help(open)可以看到open()函数的定义:open(file,mode=’r’,buffering=1,encoding=None,errors=None,newline=None,closefd=True,opener=None)
2、文件的打开模式:
3、文件的对象方法:
典型课后题
下边只有一种方式不能打开文件,请问是哪一种,为什么?
>>> f = open('E:/test.txt','w') #A >>> f = open('E:\test.txt','w') #B >>> f = open('E://test.txt','w') #C >>> f = open('E:\\test.txt','w') #D
答:B,Windows在路径名中既可以接受斜线(/)也可以接受反斜线(\),不过如果使用反斜线作为路径名的分隔符的话,要注意使用双行转义,否则Python会将反斜线进行转义,例如(\n)看成一个换行符,(\t)看作一个制表符等。
打开一个文件我们使用open()函数,通过设置文件的打开模式,决定打开的文件具有那些性质,请问默认的打开模式是什么呢?
答:open()函数默认的打开模式是’ rt’,即可读、文本的模式打开。
请问 >>> open(' E: \\Test.bin' , ' xb' )
是以什么样的模式打开文件的?
答:以“可写入以及二进制模式”打开文件“E: \Test.bin”。
这里要注意的是’ x’和’ w’均是以“可写入”的模式打开文件,但以’ x’模式打开的时候,如果路径下已经存在相同的文件名,会抛出异常,而直接覆盖同名文件。
因此,’ w’模式打开文件会比较危险,容易导致此前的内容遗失,因此使用’ w’模式打开文件前先检查该文件名是否已经存在显得非常重要
尽管Python有所谓的“垃圾回收机制”,但对于打开了的文件,在不需要用到的时候我们仍然使用f. close()将文件对象“关闭”,这是为什么呢?
答:Python拥有垃圾收集机制,会在文件对象的引用计数降至零的时候自动关闭文件,所以在Python编程里,如果忘记关闭文件并不会带来什么危险。
但并不是说就可以不要关闭文件,如果你对文件进行了写入操作,那么你应该在完成写入之后进行关闭文件。因为Python可能会缓存你写入文件中的数据,如果这中间断电了神马的,那些缓存的数据根本就不会写入到文件中。所以,为了安全起见,要养成使用完文件后立刻关闭的优雅习惯。
如何将一个文件对象(f)中的数据存放进列表中?
答:list(f)
如何迭代打印出文件对象(f)中的每一行数据?
for eacn_line in f: print(each_line)
文件对象的内置方法f. read([size=-1])作用是读取文件对象内容,size参数是可选的,那如果设置了size=10,例如f. read(10),将返回什么?
答:将返回从文件指针开始(注意这里并不是文件头哦)的连续10个字符。
如何获得文件对象(f)当前文件指针的位置?
答:f. tell()
还是视频中的那个演示文件(record. txt),请问为何f. seek(45, 0)不会出错,但f. seek(46)就出错了呢?
>>> f.seek(46) 46 >>> f.readline() Traceback (most recent call last): Flie "<pyshell#18>", line 1, in <module> f.readline() UnicodeDecodeError: 'gbk' codec can't decode byte 0xe3 in possition 4:illegal multibyte sequence
答:因为使用f. seek()定位的文件指针是按字节为单位进行计算的,演示文件(record. txt)是以GBK进行编码的,按照规则,一个汉字需要两个字节,f. seek(45)的位置位于字符“小”的开始位置,因此可以正常打印,而f. seek(46)的位置刚好位于字符“小”的中间位置,因此按照GBK的编码规则将无法将其解码!
试尝试将文件(OpenMe.mp3)打印到屏幕上。
f = open('D:\\OpenMe.mp3') for i in f: print(i,end='') f.close()
运行结果如下:
编写代码,将上一题中的文件(OpenMe.mp3)保存为新文件(OpenMe. txt)
f = open('D:\\OpenMe.mp3') ff = open('D:\\OpenMe.txt','x') for i in f: ff.write(i) f.close() ff.close()
论坛参考答案为:
f = open('D:\\OpenMe.mp3') f2 = open('D:\\OpenMe.txt','x') f2.write(f.read()) f.close() f2.close()
- FishC笔记—28 讲 文件:因为懂你,所以更永恒
- 028:文件:因为懂你,所以更永恒
- 13.文件:因为懂你,所以永恒
- 因为瞬间,所以永恒!
- FishC笔记—29 讲 文件:一个任务
- FishC笔记—15 讲 字符串:格式化
- FishC笔记—16 讲 序列,序列
- FishC笔记—27 讲 集合:在我的世界里,你就是唯一!
- FishC笔记—32 讲 异常处理:你不可能总是对的
- FishC笔记—33 讲 异常处理:你不可能总是对的2
- FishC笔记—04 讲:改进我们的小游戏
- FishC笔记—05 讲:闲聊之 Python 的数据类型
- FishC笔记—06 讲:Pyhon 之常用操作符
- FishC笔记—18 讲 函数:灵活即强大
- FishC笔记—21 讲 函数:lambda表达式
- FishC笔记—22 讲 函数:递归是神马
- FishC笔记—25 讲 字典:当索引不好用时
- 因为有你,所以精彩
- 解决Axure发布分享预览的3个方法
- opencv里的Mat和IplImage
- LintCode :不同的路径
- gpio 产生Generic Event Device中断
- 拍照、相册、通讯录
- FishC笔记—28 讲 文件:因为懂你,所以更永恒
- 安装Django教程
- 开源项目源码解析-PhotoView 源码解析
- 调试技巧 vs2010 output
- 二维码生成器
- 关于SimpleDateFormat安全的时间格式化线程安全问题
- 常用iOS URL Scheme附录 大全
- 关于Http协议的get方法和post方法的区别和用法
- Microsoft Visual J#2.0 Second Edition安装程序返回错误代码"1603'