零基础学习Python 作业 第28章

============= CH28 homework ============

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

Answer: B 由于’\’无法识别

1 打开一个文件我们使用open()函数, 通过设置文件的打开模式, 决定打开的文件具有哪些性质, 请问默认的打开模式是什么呢?

Answer: f = open(”, ‘rt’)

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

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

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

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

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

Answer:

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

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

Answer:

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

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

Answer: 返回f从文件指针开始的连续10个’字符’

7 如何获取文件对象(f)当前文件指针位置?

Answer: 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

Answer: 因为使用f.seek()定位的文件指针是按字节为单位进行计算的, 演示文件(record.txt)是以GBK进行编码的, 按照规则一个汉字需要占用两个字节, f.seek(45)的位置位于字符”小”的开始位置, 因此可以正常打印, 而 f.seek(46)的位置刚好位于字符”小”的中间位置, 因此按照GBK编码的形式无法将其解码。


Practice

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()

你可能感兴趣的:(零基础学习Python,课后作业)