零基础学习Python 作业 第28章

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()函数, 通过设置文件的打开模式, 决定打开的文件具有哪些性质, 请问默认的打开模式是什么呢?

open('filename',‘rt’))

 

2 请问 >>>open(‘E:\Test.bin’, ‘xb’)是以什么样的模式打开文件的?

可写入的二进制模式 
‘x’ 如果文件已经存在,使用此模式打开将会引发异常 
‘b’ 以二进制模式打开文件

 

3 尽管Python有所谓的垃圾回收机制, 但对于打开了的文件, 再不需要用到的时候我们仍然需要使用f.close()将文件对象关闭, 这是为什么呢?

资源被占用, 内存被占用。如果不close(), 那就要等到垃圾回收时, 自动释放资源.垃圾回收的时机是不确定的, 也无法控制的.
垃圾收集机制, 会在文件对象的引用计数降至0时自动关闭文件, 所以在Python的编程里, 如果忘记关闭文件并不会造成内存泄露那么危险。 但是如果你对文件进行了写入操作, 那么你应该在完成后关闭文件。因为Python可能会缓存你写入的数据, 如果断电那就会丢失数据


4 如何将一个文件对象(f)中的数据存放在列表中?

# 如果是单行
list(open('xx', 'r'))
# 如果是多行
f = open('xx')
list1 = []
for each in f:
      if each != '\n':
        list1.append(each)
     else:
           continue

5 如何迭代打印文件对象(f)中的每一行数据?

f = open('xx')
list1 = []
for each in f:
      if each != '\n':
        list1.append(each)
     else:
           continue

6 文件对象的内置方法 f.read([size = -1]) 作用是读取文件对象内容, size参数是可选的, 那如果设置了size = 10, f.read(10), 将返回什么内容呢?

返回f从文件指针开始的连续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 尝试将文件(CCTV.mp3)打印到屏幕上?

# 这里自己用网易云下载的一首歌,然后打开就是一堆码
f = open('D:\\Learn\\Python project\\CH28 homework\\CCTV.mp3','rb')
for each in f:
print(each, end = ' ')
f.close()
---------------------
1 编写代码,将上一题中的文件(CCTV.MP3), 保存为新文件(CCTV.txt)

# Test 1~20
f1 = open('D:\\Learn\\Python project\\CH28 homework\\CCTV.mp3','rb')
f2 = open('D:\\Learn\\Python project\\CH28 homework\\CCTV.txt','x')
f2.write(str(f.read(20)))
f2.close()
f1.close()

 

posted @ 2018-10-29 13:50  蘑菇慢慢  阅读(205)  评论(0)    收藏  举报