运行结果如下:
函数open(filename,mode)用于读取文件,返回一个file object。 所以现在我们的f是一个文件对象
参数filename:是一个字符串,用来代表文件名,如果只写文件名,就会在程序当前目录下查找,也可以像我这样指定路径
参数mode:决定了打开文件的方式,比如只读, 写入, 追加等等。详情如下:
注:此图截取自python官方文档,在Built-in Functions 中查找open( )即可查询到
在程序最后,一般要调用此函数关闭文件,否则会造成一些潜在问题
此例子中,我的f.read( )语句就是调用了文件对象的方法 read( )
它的功能是读取这个文件的全部内容,并作为字符串返回,让我们来试一下content是什么内容:
可以看到content果然是个字符串,因为在读取文件时,python将所有文本都解读为字符串。如果你读取的是数字,并要将它作为数字使用,就必须用int( )或者float( )转换成数字
但这里注意到一个问题,我们先来看一下我test.txt原本写的是什么:
可见我只写了三行,最后一个字符是叹号!但是回头看一下我们的content的内容,发现叹号后面跟了一个 \n,很明显,
这个换行符不是我文本的内容,因为read到达文件末尾时会自动返回这个,表示文本结束,所以在print打印出来的时候,
会多打印出来一个空行!可以回到最上面看我们程序的输出的确是有多出一行的间距。要解决这个问题,只需要在print函数中使用一个
rstrip( )方法: print( content.rstrip( ) )即可不输出这个空行
####################################################################################
可以看到,这次我只用了open( ),没用close( ),会出问题吗?不会。
这次我用了关键字 with,with会让python自动选择合适的时候来关闭文件,即python判断不需要访问文件后将其关闭
所以采用这种结构,我们只管打开文件,不用操心合适关闭文件
但要注意!使用with时,open返回的文件对象只能在with的代码块中使用,即此例中,我们的f的有效区域只在该代码块中,
但是content还是可以在代码块外面使用,只不过content只是一个字符串而已,稍加改动,我们用readline( )取代read( )逐行读取,
然后把结果存进一个列表line里,这样由于列表line的每个元素都对应于文件中的一行,因此输出于文件内容完全一致
示例程序:
首先要注意的是此时用open打开文件时,要选用'w'模式,如果没有那个名字的文本,就会新建一个空文档然后进行操作
不要忘了最后要close()
经过操作之后看一下我们的操作结果,到文档路径用linux命令vim打开看一下这个文档。
可以发现,我们明明分两次进行的write操作,但是两句话居然连接在了一起,显得十分难看,这是为什么?
因为调用write( )函数的时候,python并不会自动在文本末尾添加换行符 \n所以,两句话并没有分行写,就造成了这种情况。
回想一下我们之前说read()函数的时候,它却在文档末尾会自动返回一个换行符造成我们多打印一个空行,看起来write和read还真的有一点对偶性(开玩笑的)
所以一定要养成write的好习惯,注意添加换行符。
如果有时候我们只是需要在已有的文档末尾添加新的文档的话,就可以使用 'a'模式
然后执行操作之后,同样用vim查看一下:
我们可以看到,画绿线的部分,紧跟之前的单词,很难看,问题就出在我们之前3.1中输入那两句话时,没有在末尾添加换行符;
有时候为了防止这种之前的文档末尾遗忘加换行符,我们可以在新输入的文档最前面自己加一个换行符以示区分。同时,可以看到
由于我的第一句和第二句话末尾都加了换行符,所以此次第二句和第三句都新起一行了。
文本的读取和写入基本操作就是这样了
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有