Python随记(六)Python读取文件和写入文件
1.基本格式
运行结果如下:
a.函数open( )
函数open(filename,mode)用于读取文件,返回一个file object。 所以现在我们的f是一个文件对象
参数filename:是一个字符串,用来代表文件名,如果只写文件名,就会在程序当前目录下查找,也可以像我这样指定路径
参数mode:决定了打开文件的方式,比如只读, 写入, 追加等等。详情如下:
注:此图截取自python官方文档,在Built-in Functions 中查找open( )即可查询到
b.函数close( )
在程序最后,一般要调用此函数关闭文件,否则会造成一些潜在问题
c.文件对象方法
此例子中,我的f.read( )语句就是调用了文件对象的方法 read( )
它的功能是读取这个文件的全部内容,并作为字符串返回,让我们来试一下content是什么内容:
可以看到content果然是个字符串,因为在读取文件时,python将所有文本都解读为字符串。如果你读取的是数字,并要将它作为数字使用,就必须用int( )或者float( )转换成数字
但这里注意到一个问题,我们先来看一下我test.txt原本写的是什么:
可见我只写了三行,最后一个字符是叹号!但是回头看一下我们的content的内容,发现叹号后面跟了一个 \n,很明显,
这个换行符不是我文本的内容,因为read到达文件末尾时会自动返回这个,表示文本结束,所以在print打印出来的时候,
会多打印出来一个空行!可以回到最上面看我们程序的输出的确是有多出一行的间距。要解决这个问题,只需要在print函数中使用一个
rstrip( )方法: print( content.rstrip( ) )即可不输出这个空行
####################################################################################
其实File Object(文件对象) 还有很多其他的方法,比如readline( ), tell( )等等,有兴趣的同学可以右转我的这篇博客:
Python随记(五)文件对象方法 Method of FileObject
####################################################################################
2.另一种格式
可以看到,这次我只用了open( ),没用close( ),会出问题吗?不会。
这次我用了关键字 with,with会让python自动选择合适的时候来关闭文件,即python判断不需要访问文件后将其关闭
所以采用这种结构,我们只管打开文件,不用操心合适关闭文件
但要注意!使用with时,open返回的文件对象只能在with的代码块中使用,即此例中,我们的f的有效区域只在该代码块中,
但是content还是可以在代码块外面使用,只不过content只是一个字符串而已,稍加改动,我们用readline( )取代read( )逐行读取,
然后把结果存进一个列表line里,这样由于列表line的每个元素都对应于文件中的一行,因此输出于文件内容完全一致
3.写入文件
3.1写入空文档
示例程序:
首先要注意的是此时用open打开文件时,要选用'w'模式,如果没有那个名字的文本,就会新建一个空文档然后进行操作
不要忘了最后要close()
经过操作之后看一下我们的操作结果,到文档路径用linux命令vim打开看一下这个文档。
可以发现,我们明明分两次进行的write操作,但是两句话居然连接在了一起,显得十分难看,这是为什么?
因为调用write( )函数的时候,python并不会自动在文本末尾添加换行符 \n所以,两句话并没有分行写,就造成了这种情况。
回想一下我们之前说read()函数的时候,它却在文档末尾会自动返回一个换行符造成我们多打印一个空行,看起来write和read还真的有一点对偶性(开玩笑的)
所以一定要养成write的好习惯,注意添加换行符。