[小甲鱼] 零基础入门python第028讲课后测试题及答案:文件:因为懂你,所以永恒

测试题:
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,使用反斜杠时要注意转义 '\\'
1.打开一个文件我们使用open()函数,通过设置文件的打开模式,决定打开的文件具有哪些性质,请问默认的打开模式是什么呢?
‘rt’只读、文本模式
2.请问>>>open('E:\\Test.bin','xb')是以什么样的模式打开文件的?
  如果此文件已经存在将引发异常,如果不存在则以二进制模式打开文件
  答案:以可写入以及二进制模式打开文件,注意:这里‘x’和‘w’都是以‘可写入’的模式打开文件,但以‘x’模式打开时如果路径下已经存在相同的文件名,会抛出异常,而‘w’模式的话会直接覆盖同名文件,因此‘w’模式打开文件会比较危险,容易导致此前的内容遗失,因此使用‘w’模式打开文件前先检查该文件名是否存在非常重要
3.尽管python有所谓的“垃圾回收机制”,但对于打开了的文件,在不需要用到的时候我们仍然需要使用f.close()将文件对象“关闭”,这是为什么呢?
  将写好的文件进行保存
  答案:python拥有垃圾收集机制,会在文件对象的引用计数将至零时自动关闭文件,所以在python编程里,如果忘记关闭文件并不会造成内存泄露那么危险。
  但是并不是说可以不关闭文件,如果你对文件进行了写入操作,那么你应该在完成写入之后进行关闭文件。因为python可能会缓存你写入的数据,如果这中间断电了神马的,哪些缓存的数据根本就不会写入到文件中。所以,为了安全起见,要养成使用完文件后立刻关闭的优雅习惯。
4.如何将一个文件对象(f)中的数据存放进列表中?
  list(f)
5.如何迭代打印出文件对象(f)中的每一行数据?
 for each in f:
      print(each)
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(46)
46
>>>f.readline()
Traceback (most recent call last):
    File "",line 1, in 
        f.readline()
UnicodeDecodeError:'gbk' codec can't decode byte 0xe3 in position 4: illegal multibyte sequence

       答案:因为使用f.seek()定位的文件指针是按字节为单位进行计算的,演示文件(record.txt)是以GBK进行编码的,按照规则,一个汉字需要占用两个字节,f.seek(45)的位置位于字符“小”的开始位置,因此可以正常打印,而f.seek(46)的位置刚好位于字符“小”的中间位置,因此按照GBk编码的形式无法将其解码!
动动手:
0.尝试将文件(OpenMe.mp3)打印到屏幕上
  直接使用打开文本文件的形式打开即可

f = open('OpenMe.mp3')
for each_line in f:
    pring(each_line,end='')
f.close()


1.编写代码,将上题中的文件(OpenMe.mp3)保存为新文件(OpenMe.txt)

f1 = open('OpenMe.mp3')
f2 = open('OpenMe.txt','x')   #使用‘x’打开更安全
f2.write(f1.read())
f2.close()
f1.close()

 

你可能感兴趣的:(零基础入门python)