博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 读写文件
阅读量:6583 次
发布时间:2019-06-24

本文共 2206 字,大约阅读时间需要 7 分钟。

文件的打开读写关闭(文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源)

#写文件with open(r'D:\Test\1.txt','w') as f:           #with比try....finally更加简洁,with自动调用close()方法;open(文件路径,读取方式),r:只读,默认打开方式      f.write('Hello,world')                    #write(str):写入字符串;writelines():一次性写入多行#读文件with open(r'D:\Test\1.txt','r') as f:           #r:读       print f.read()         #read([size]),size可选,指定读取的文件大小,单位是字节,默认读取全部,readline():读取一行;readlines([size]),读取返回一个列表,占内存空间>>> Hello,world
>>> try:       f=open(r'D:\Test',r)       print f.read()    finally:        if f:            f.close()

文件打开方式:

+:同时读写,即可读又可写,边写边读、边读边写

方式 说明 注意 是否清空文件 是否覆盖文件内容 文件不存在是否创建新文件
‘r’ 只读 文件不存在时报错 - -
'r+' 读写 可读可写,文件不存在报错,写入时只覆盖写入文件的大小
'w' 只写 可写方式打开,不可读 -
'w+' 读写 可读可写 -
'a' 追加

文件已有的内容后追加内容,不可读

'a+' 追加以及读 可读可追加,写入时,添加到文章末尾,并且指针位于添加后的末尾,所以再次读取会乱码,因为指针指向末尾,读取时实际上是跳过实际要读取的内容,去读取磁盘缓存的上一个文件缓存的内容,所以是乱码
'rb','wb','ab','rb','wb+','ab+':二进制方式打开
>>> with open(r'D:\Test\a.txt','w') as f:	     f.write('Hello,world')>>>with open(r'D:\Test\a.txt','r') as f:	    print f.read()>>> Hello,world                                        #w写入>>> with open(r'D:\Test\a.txt','a') as f:              #追加,在后面添加内容	    f.write('Hello,world')>>> with open(r'D:\Test\a.txt','r') as f:	    print f.read()>>> Hello,worldHello,world>>> with open(r'D:\Test\a.txt','w') as f:              #清空前面的内容重新写入	     f.write('Hello,world')>>> Hello,world

有关文件可能读取出乱码的问题:

一:检查下文件的指针的指向,在写完之后,必须要seek(0),把文件指针重新指向文件开头,然后再读,否则就会从缓冲区读取一大堆乱码

二:文件写入的操作先是在缓存中进行的,只有文件关闭才真正写入,因为read()似乎还是优先读取内存缓冲区。

以上的两个问题涉及到文件指针的移动seek()以及刷新缓存flush()

>>> f=open(r'D:\Test\a.txt','w')>>> f.write('kkkkkkkk')                    #此时文件的指针=8,8个字节>>> f.flush()                              #刷新缓存,缓存中的内容刷新变成:kkkkkkkk[EOF],内容为空时:[EOF]>>> f.read()                               #此时的指针在文件尾[EOF]上,则输出的是''''>>> f.seek(0)                              #将指针指向文件头,再进行文件内容的读取,就不会产生乱码>>> f.read()'kkkkkkkk'>>> f.close()

 

 产生乱码例子:

>>> f=open(r'D:\Test\a.txt','w+')>>> f.write('uuuuuuuuuuuuuuuu')>>> f.read()                             #没有刷新缓存且将指针指向文件头,读取的是缓存中的其他乱码内容'\x00\x06\x00\x00\x00@\x00\x00\x00sb\x00\x00\x00d\x00\x00Z\x00\x00d\x01\x00d\..............................'

转载于:https://www.cnblogs.com/evablogs/p/6725242.html

你可能感兴趣的文章
linux
查看>>
今夜杂谈
查看>>
第七章 虚拟化 虚拟机备份 Veeam backup &Replication
查看>>
微软云计算介绍与实践(介绍之五)
查看>>
在linux下搭建HA和LB集群(lvs&heartbeat群集)
查看>>
安装wine
查看>>
阻抗匹配与史密斯(Smith)圆图基本原理
查看>>
路由器与交换机的密码恢复
查看>>
Cisco路由器上的IPSec协议(站点到站点的×××)
查看>>
Java面向对象学习笔记 -- 5(抽象类、接口)
查看>>
关于apache下同IP多域名支持HTTPS和80跳转HTTPS的配置
查看>>
Linux Python详细安装、升级指南
查看>>
软件架构
查看>>
无法修复ie使用代理服务器
查看>>
【Apache Mina2.0开发之二】自定义实现Server/Client端的编解码工厂(自定义编码与×××)!...
查看>>
JS判断终端类型
查看>>
Exchange 2013 SP1 先决条件
查看>>
关于suid/guid
查看>>
教你给IDEA安装插件
查看>>
在windows上安装curl
查看>>