Python3.x那些事儿:[53]File对象的方法
读文件的内容,使用f.read(size),这个方法会读取一段数据并返回一个字符串或者一个bytes类型。size是一个可选的参数,当size没有给出或者为负数时,整个文件的内容都会被读取并返回。如果到达了文件的末尾,则会返回一个空字符串。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/d400248ca608a50f9670453810cec7f88b77ff23.jpg)
f.readline()函数读取一行字符串,这个字符串是以一个行结束符'\n'为结束的,如果它返回了一个空字符串,说明已经到了文件的结尾,如果返回一个'\n',则说明是一个空行。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/bab5c45872dade494d839ee226042e6816e9d523.jpg)
当要读取整个文件时,可以使用循环结构,这个方式比较高效,快速,并且代码也比较简单。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/f591ab03c8d246fe26c2d737b8bf3bef344f1e20.jpg)
如果要读取文件的所有行,则可以使用list(f)函数或者f.readlines()。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/f385f2995943040134720bf6d66b04d148290520.jpg)
f.write(string)会将string的内容写入到文件中,返回一个数值,是写入的字符的个数。如果要把其他对象写入到文件中,要先将其转换为字符串。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/e996472ae3efe07888bdca02b96c576698cf6520.jpg)
f.tell()会返回当前文件读写指针的位置,如果是用二进制打开的,则这个位置表示从文件头开始到当前位置的字节数,如果是在文本模式,则这个位置的含义就比较模糊了。
为了改变文件的读写指针的位置,可以使用f.seek(offset,from_what)函数,这个函数会从某个位置加上offset值。from_what值有三个,0表示从文件头开始,1表示从当前位置开始,2表示从文件末尾开始。默认值是0.
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/836a6aee1c324b18e6a0994553a7263349844820.jpg)
在文本文件模式中,seek()函数只能相对于文件的头部,不能相对于当前位置或者文件末尾,offset只能是f.tell()返回的值或者0,其他的任何值都会产生没有定义的行为。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/2083a5d6e1d06de849ed9391ca93cee8b104ac20.jpg)
当你使用完了文件,要用f.close()函数来将文件对象占用的系统资源进行释放,f.close()调用完后,再引用文件对象就会发生错误。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/906dbbcadce89048ed706243130e5f2042719220.jpg)
打开文件还有一种方式,是使用with关键字,它的优势是文件总是会被正确的关闭即使有异常发生,并且语句比较简洁。
![Python3.x那些事儿:[53]File对象的方法](https://exp-picture.cdn.bcebos.com/d400248ca608a50f9671453810cec7f88b77ff20.jpg)