Python文件进行写操作后立即读出的结果、原因分析、解决方法
2019-01-11 16:27
316 查看
- 问题引出
with open('***.txt','r+') as f: #读操作与写操作 f.write(‘Hello, world!’) #写入 cNames = f.readlines() #读出语句,可用read()也可用readlines(),下表就两种情况进行了区别 print(cNames)
读出语句 | readlines | read |
---|---|---|
前提准备 | 先新建一个文件***.txt内容为空,否则模式为‘r+’会报错找不到文件 | 同readlines |
运行结果与运行次数关系 | 第一次运行,输出结果为空;第二次运行,结果为一个[Hello, World!];第三次运行,结果为[Hello, World!Hello, World!];…;第n次运行,结果为n-1个Hello, World!的列表 | 每次运行结果均为空 |
文件内容与运行次数关系 | 运行n次,文件中有n个Hello, World! | 无论运行多少次,文件中只有一个Hello,World! |
原因分析:读写时有一个文件指针,数据从文件指针所在位置开始读写。上述程序通过write对文件进行写操作,此时文件指针已经在文件的尾部。
那为什么使用read和readlines会有不一样的运行结果呢?
read()在当前指针处开始读,而当前指针在文件尾部,其后为空,故read()每次运行均为空;写的时候从文件开头写,实行覆盖机制,故不论运行多少次文件内容均为一个Hello,World!
readlines()是回文件开头读取内容,但是刚刚写入的还没有保存故只能读出写入操作之前的文件内容,故readlines()每次运行得到的‘Hello,World!’个数比运行次数少1;写的时候在文件尾部写,故运行多少次,文件内容有多少个Hello,World!
- 解决办法
为了解决上述问题,让文件指针指向需要的位置,Python提供了seek()函数
语法:file_obj.seek(offset,whence = 0)
[offset: 偏移量]
[whence: 起始位置 0——文件头部(默认值);1——当前位置;2——文件尾部]
例如: seek(0) # 指针移到文件头部
seek(50,1) #指针向后移动50字节
将seek函数运用于上述代码:
with open('***.txt','r+') as f: #读操作与写操作 f.write(‘Hello, world!’) #写入 f.seek(0) #读出前将指针移到文件开头 cNames = f.readlines() #文件所有行读出,此处也可以使用read()函数,结果一样 print(cNames)
运行结果分析:
每一次运行结果均为[Hello, World!]
相关文章推荐
- Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法
- windows(win7,win8,xp)hosts文件找不到原因分析及解决方法
- Win7系统删除文件提示“文件名过长”怎么办?原因分析以及解决方法
- 调用Weka API和使用GUI进行分类时,输出结果相反的原因及解决方法
- vs2010无法打开项目文件的原因分析及解决方法
- Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
- 我用python将结果写入txt文件出现的编码问题及其解决方法
- Hadoop HDFS 文件访问权限问题导致Java Web 上传文件到Hadoop失败的原因分析及解决方法
- Python实现对PPT文件进行截图操作的方法
- 解决方法——使用opencv_python读入视频,结果视频文件打不开——cv2.VideoWriter()
- cmd运行python文件时对结果进行保存的方法
- 用Python进行文本分析时出现UnicodeDecodeError错误的解决方法
- 部署在服务器上的应用请求json文件返回404解决方法及原因分析
- Python3.6安装win32扩展并且实现对PPT文件进行截图操作的方法
- 【Window OS】”对于目标文件系统,文件XXXXX过大“导致无法进行文件操作的解决方法
- AsyncTasLoader不进行加载操作的原因及解决方法
- python中对Excel进行写入操作,写入一列或者一行(从excel中读出label和feature对应格式方法以及插入一行或者一列方法实现)
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- 浅谈python在提示符下使用open打开文件失败的原因及解决方法
- SQL SERVER 2000 创建挂起的文件操作 原因及解决方法