本文是跟着鱼C论坛小甲鱼零基础学习Python3的视频学习的,课后题也是跟随每一课所附属的题目来做的,根据自己的理解和标准答案记录的笔记。
第二十八课
测试题:
0.下边只有一种方式不能打开文件,请问是哪一种,为什么?
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,因为没有对反斜杠进行转义所以会造成以为在使用 \t 而导致无法打开文件,其他的几个因为WINDOWS可以接受斜杠形式的文件路径,而A是因为/没有转义的意思,C的//也是一样没有转义的意思,D则是已经用双反斜杠转义过了所以可以正常打开。
1.打开一个文件我们使用open()函数,通过设置文件的打开方式,决定打开的文件具有哪些性质,请问默认的打开模式是什么?
答:默认的打开形式是 'rt' 以 只读 文本 模式打开。其他方式有:
打开模式 | 执行操作 |
---|---|
'r' | 以只读方式打开文件(默认) |
'w' | 以写入的方式打开文件,会覆盖已存在的文件(有风险**) |
'x' | 如果文件已经存在,使用此模式打开将引发异常 |
'a' | 以写入模式打开,如果文件存在,则在末尾追加写入 |
'b' | 以二进制模式打开文件 |
't' | 以文本模式打开(默认) |
'+' | 可读写模式(可添加到其他模式中使用) |
'U' | 通用换行符支持 |
2.请问>>>open(‘E:\Test.bin’,‘xb’)是以什么样的模式打开文件的?
答:是以 可写入 二进制 模式打开文件。
3.尽管Python有所谓的“垃圾回收机制”,但是对于打开了的文件,在不需要用到的时候我们任然需要使用f.close()将文件对象“关闭”,这是为什么呢?
答:Python拥有垃圾收集机制,会在文件对象的引用计数降至零的时候自动关闭文件,所以在Python编程里,如果忘记关闭文件并不会带来什么危险。
但并不是说就可以不要关闭文件,如果你对文件进行了写入操作,那么你应该在完成写入之后进行关闭文件。因为Python可能会缓存你写入文件中的数据,如果这中间断电,那些缓存的数据根本就不会写入到文件中。所以,为了安全起见,要养成使用完文件后立刻关闭的习惯。
4.如何将一个文件对象(f)中的数据存放进列表中?
答:list( f ) 即可。
5.如何迭代打印出文件对象(f)中的每一行数据?
答:直接使用for语句把文件对象迭代出来即可:
f.seek(0, 0)
for each_line in f:
print(each_line)
6.文件对象的内置方法f.read(size = -1)作用是读取对象内容,size参数是可选的,那如果设置size = 10,例如f.read(10),将返回什么内容?
答:返回文件从指针位置开始计算的10个字符元素内容。
7.如何获得文件对象(f)当前文件指针的位置?
答:f.tell()
8.还是视频中的那个演示文件(record.txt),请问为何f.seek(45,0)不会报错,但是f.seek(46)就出错了呢?
答:因为使用f. seek()定位的文件指针是按字节为单位进行计算的,演示文件(record. txt)是以GBK进行编码的,按照规则,一个汉字需要两个字节,f. seek(45)的位置位于字符“小”的开始位置,因此可以正常打印,而f.seek(46)的位置刚好位于字符“小”的中间位置,因此按照GBK的编码规则将无法将其解码!
动动手:
0.试尝试将文件(OpenMe.mp3)打印到屏幕上。
答:
f = open('OpenMe.mp3')
for each_line in f:
print(each_line , end='')
f.close()
输出结果:
长期使用Windows操作系统的朋友很容易被扩展名所误导,认为扩展名决定文件类型,其实这种观念是错误的!
其实这就跟一个姓张的坏人,尽管把名字改为了“张好人”,但他还是一个坏人是一个道理的^_^
关于文件的扩展名,初学者容易走进的误区:
误区一:文件扩展名是一个文件的必要构成部分
一个文件可以有或没有扩展名,对于打开文件操作,没有扩展名的文件需要选择程序去打开它,有扩展名的文件会自动用设置好的程序(如有)去尝试打开(是“尝试打开”,而不是“打开”的原因参看下面的第2个误区),文件扩展名是一个常规文件的构成部分,但一个文件并不一定需要一个扩展名。
误区二:文件扩展名表明了该文件是何种类型
文件扩展名可以人为设定,扩展名为TXT的文件有可能是一张图片,同样,扩展名为M-P3的文件,依然可能是一个视频。
1. 编写代码,将上一题中的文件(OpenMe.mp3)保存为新文件(OpenMe. txt)
答:
# 第一种方法:
f1 = open('D:\Python\Python3\OpenMe.mp3')
f2 = open('D:\Python\Python3\OpenMe.txt','x')
for each_line in f1:
f2.write(each_line)
f1.close()
f2.close()
#第二种方法
f1 = open('D:\Python\Python3\OpenMe.mp3')
f2 = open('D:\Python\Python3\OpenMe2.txt','x')
f2.write(f1.read())
f1.close()
f2.close()