「Python」2020.04.07学习笔记 | 第六章文件r+、rb模式下对文件进行操作+复制文件小练习

  • 学习测试开发的Day96,真棒!
  • 学习时间为1H15M
  • 第九次全天课(下午视频二0-35M)

r+ 代码

>>> fp=open(r"e://a.txt","r+")
>>> fp.read()
'abc\ndef\nefg\n'
>>> fp.write("Hello")
5
>>> fp.read()
''
>>> fp.seek(0,0)
0
>>> fp.read()
'abc\ndef\nefg\nHello'
>>>

替换是根据字节来覆盖的
<'abc\ndef\nefg\nHello'------>明天见------>'明天见ef\nefg\nHello'
一个汉字两个字节

代码:

>>> fp=open(r"e:\\a.txt","r+")
>>> fp.write("明天见")
3
>>> fp.seek(0,0)
0
>>> fp.read()
'明天见ef\nefg\nHello'
看当前的位置在哪里,用tell

代码:

>>> fp.seek(0,0)
0
>>> fp.tell()
0
>>> fp.readline()
'明天见ef\n'
>>> fp.tell()
10
>>>

一般来说,不要覆盖写

rb

>>> fp=open(r"e:\\a.txt","rb")
>>> fp.read()
b'\xc3\xf7\xcc\xec\xbc\xfbef\r\nefg\r\nHello'
>>> fp.seek(0,0)
0
>>> fp.read().decode("gbk")
'明天见ef\r\nefg\r\nHello'
>>>

使用r读图片文件

读取失败

>>> fp=open(r"e:\\1.png","r",encoding="utf-8")
>>> fp.read()
Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Miniconda3\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
>>>

使用rb读图片文件

读成功了

>>> fp=open(r"e:\\1.png","rb")
>>> fp.read()
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\x0e\x00\x00\x015\x08\x06\x00\x00\x00\x8f\xeeh\xca\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\tpHYs\x00\x00

>>> fp.seek(0,0)
0
>>> fp.read(10)
b'\x89PNG\r\n\x1a\n\x00\x00'
>>>

小练习:复制文件

rb读取所有的内容,写入另外一个文件

自己的代码
fp=open(r"e:\\1.png","rb")
content=fp.read()
fp2=open(r"e:\\2.png","rb+")
fp2.write(content)
fp2=open(r"e:\\2.png","rb")
fp2.seek(0,0)
print(fp2.read(10))

输出:

PS D:\0grory\day9> python .\mycopyfile.py
b'\x89PNG\r\n\x1a\n\x00\x00'
老师的代码
fp1=open("e:\\1.png","rb")
content=fp1.read()
fp1.close()

fp2=open("e:\\2.png","wb")
fp2.write(content)
fp2.close()
image.png

代码:

>>> fp=open(r"e:\\b.txt","a+")
>>> fp.read()
''
>>> fp.write("你好11")
4
>>> fp.write("你好12")
4
>>> fp.write("你好13")
4
>>> fp.write("你好14")
4
>>> fp.write("你好15\n")
5
>>> fp.write("你好16\n")
5
>>> fp.write("你好17\n")
5
>>> fp.write("你好18\n")
5
>>> fp.seek(0)
0
>>> fp.read()
'你好11你好12你好13你好14你好15\n你好16\n你好17\n你好18\n'
>>>

你可能感兴趣的:(「Python」2020.04.07学习笔记 | 第六章文件r+、rb模式下对文件进行操作+复制文件小练习)