设为首页 收藏本站
查看: 1946|回复: 0

[经验分享] python基础教程学习笔记---(6)文件读写

[复制链接]

尚未签到

发表于 2015-11-29 10:04:25 | 显示全部楼层 |阅读模式
1、open函数语法:
python通过open函数打开文件,建立程序与文件之间的连接。
open函数语法:open(filename[,mode[,buffering]])
其中filename是指要进行操作的文件名称,由文件名称和路径组成,需要加引号。
mode为操作模式参数,包括读、写、追加等。
buffering是缓冲参数,控制着文件的缓冲。当buffering=0或者False时,I/O就是无缓冲的,所有的读写操作都是直接针对硬盘的,如果是1或者True,I/O就是有缓冲的,python是用内存来代替硬盘,使得程序运行更快。大于1代表缓冲区的大小,单位为字节,-1或者其他任意负数代表使用默认的缓冲区大小。
只有filename参数是必须指定的,mode和buffering参数则是可选的,mode参数的缺省值为'r'。


2、参数mode的取值:
(1)基本取值:
DSC0000.png
r、w、a为打开文件的基本模式,分别表示只读、只写(覆盖写)、追加(追加写)。
b、t、+、U,与上面三个基本模式组合使用。
注意:文本模式用于打开文本文件,二进制模式用户打开二进制文件。
(2)常见的mode组合取值:
DSC0001.png
(3)举例说明:
现在window系统PC机硬盘上存在文件G:\file1.txt,对其进行演示操作。
①r模式:
DSC0002.png
DSC0003.png DSC0004.png
报错的原因是路径中包含的'\'被识别为转义符,因此造成文件路径错误。
DSC0005.png
不能直接使用print打印对象f1的内容,需要使用read方法读取内容后,方能打印。
上面的open函数中虽然没有指定mode参数,但其实使用了mode的缺省值'r'。
DSC0006.png
效果一样,所以当只使用'r'参数时,可以省略。
另外,这里如果不想使用两个反斜杠,那么可以使用‘r+字符串’形式:
DSC0007.png
字符串前加r代表此字符串为原样显示,不转义。第一个'r'就是让字符串原样显示,第二个'r'是open模式。
②w模式:
DSC0008.png
由于只使用了'w',因此程序对该文件只有写权限,没有读权限,因此使用read方法读时会报错。
完成这一步操作后,通过资源管理器去查看file1.txt的文件内容,如下,发现里面已被清空。
DSC0009.png
这是因为还没有断开程序与文件的连接,所以追加的内容尚未保存,因此需要使用close方法来关闭文件(即断开文件与程序的连接)。重新打开文件可以看到,文件已被新内容覆盖更新。
DSC00010.png
③a模式:
DSC00011.png
报错的原因是'a'模式只有写的权限,没有读的权限。
完成write操作后,但在关闭文件前,可以看到file1.txt文件并没有被更新。
DSC00012.png
关闭文件后,可以看到新内容被追加到文件末尾。
DSC00013.png
如果想换行追加,可以加上在字符串中加上换行符。
DSC00014.png
DSC00015.png
④r+模式:
'r+'模式是同时读写模式,但是必须指定写的位置,从指定的位置开始按字符逐个覆盖写。
DSC00016.png
DSC00017.png
从上面的两次写操作过程可以看出,第一次通过seek(0)指定从第一个字符开始覆盖写,第二次通过seek(5)从第6个字符开始覆盖写,没有被覆盖的字符继续保留。
如果不指定其实位置就开始进行写操作的话,就会报错,如下。
DSC00018.png
对于seek()方法的具体作用,在后面将会谈到。
⑤w+模式:
DSC00019.png
DSC00020.png
对于'w+'模式,其只是在'w'模式上添加了能读取文件对象的权限。
另外,从上面的例子中需要注意一点,一旦通过'w+'模式将一个文件指定给一个文件对象,那么这个文件就立即被清空,所以这里的f10.read()的结果是空串。也就是说,使用'w'或者'w+'模式,原文件的内容并不是在使用write方法时被覆盖掉,而是在授予写权限时就立即被清空。
⑥a+模式:
DSC00021.png
DSC00022.png
'a+'模式相对于'a'是增加了读文件的权限,但是从上例中可以看出,使用了read方法后,再进行write写操作就会报错,而不使用read方法直接进行write写操作是不会报错的,并且追加写成功。

3、常用的文件方法:
(1)基本介绍:
DSC00023.png
(2)举例说明:
现有文件:G:\file2.txt,文件内容如下:
DSC00024.png
DSC00025.png DSC00026.png
read()方法是读取全部文件内全部数据内容,以字符串形式显示,对于文件中的换行符,在结果中以'\n'显式显示。读读取前,指针位于文件头(位置为0),读取全部后,指针位于文件末尾的下一位。返回文件位置用tell()方法,结果为长整型。
DSC00027.png
read(size)方式是指定读取字符串的字节数。最初指针放在文件开头,读取完毕后,移动至已读取字符串的下一位。
所以这里,使用read(5)读取了前5个字符,指针移动到第6个字符处,也就是编号为5L的位置。接着再使用read(7)读取的时候就从第6个字符开始读,以此类推。 DSC00028.png
DSC00029.png
DSC00030.png
使用readline()方法,逐行读取,每次读取一行,读取完毕后指针移到下一行开头。
DSC00031.png
readlines()方式是将读取的结果以列表形式存储,读取完毕后,指针移到文件末尾的下一位。原文件中的每一行是返回列表中的一个元素。 DSC00032.png
DSC00033.png
DSC00034.png
使用'a'模式进行追加写,打开文件后,指针仍指在文件头,通过write()方法写进字符串后,指针移到文件尾的下一位。 DSC00035.png
DSC00036.png

这个例子与上个例子的区别用于说明,当我们想在文件中追加写多行时,需要在追加的字符串中显式的写出换行符(\n)。
现有文件file3.txt,文件内容如下:



使用readlines()方法将读取文件的内容保存成列表。然后使用writelines()方法将该列表追加到另一个文件的末尾。每一个元素称为一行,由于起始位置为原文件的末尾下一位(并不是下一行),所以追加的第一行并没有单独成行,而是在原文件的最后一行的后面。
上例可以说明,writelines()方法接受列表,将列表每个元素作为一行写入文件中。
注意,因为有write()方法,所以python中是不存在writeline()方法的。

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144818-1-1.html 上篇帖子: [Python] Python中的一些特殊函数 下篇帖子: TF-IDF算法(2)—python实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表