0

0

关于python,请教这两个程序有什么不同,为什么运行结果不一样?

php中文网

php中文网

发布时间:2016-06-06 16:24:17

|

2371人浏览过

|

来源于php中文网

原创

第一个程序
a = open('test.txt','w')
a.write('jdhfjkf')
a.write('\n')
a.write('zbvbvxsg')
a.close()
第二个程序
open('test.txt','w').write('jdhfjkf')
open('test.txt','w').write('\n')
open('test.txt','w').write('zbvbvxsg')
open('test.txt','w').close()
我感觉它们应该是一样的。可是为什么只有第一个程序能写入test.txt,而第二个程序的执行结果是空白?

(我想:是不是一个文件只用open和'w'一次,否则,每一次'w' 都会把前面写入的东西清空。可是问题又来了,我把第二个程序第四行去掉,第三行就能写入,可是加上第四行,又变成了空白)这个我懂了

新问题:第一个程序里面,a作为一个变量,也有'w'啊,每次执行a.write()时,不也和第二个程序差不多么?应该也是每write一次,就把前面的清空?

回复内容:

每次w open文件都会把文件清空 题主你看我也从来没有用过Python,看到你这个问题后我就顺手查了一下文档
open() returns a file object, and is most commonly used with two arguments: open(filename, mode).>>>>>> f = open('workfile', 'w') >>> print f 写文件有两种模式:一种叫truncate(截断),一种叫append(追加)。前者每次打开文件都会把文件已有的内容删除,再写入内容;后者每次打开文件不会删除已有内容,而是在已有内容之后在写入内容。剩下的题主自己想想?========================================================================学东西,还是好好先找几本书,把基础打好才对。 看文档。 先给出题主提出的新问题的答案,清空内容不是在File Objects 调用write时发生的,而是在用“w”模式open文件时发生的题主其实在两个地方存在疑惑,"w"模式的特性 , 以及file.close的作用 分开说明。关于file.close,Python文档里说的很清楚了,看这里:file.write,我引用一下Due to buffering, the string may not actually show up in the file until the flush() or close() method is called.
至于w模式的问题,Python文档并没有把这件事说清,也可能是我没看到:),我在stackoverflow上看到过极好的说明:python open built-in function: difference between modes a, a+, w, w+, and r+?
从中我们可以看到“w”模式的问题其实和Python关系不大,要理解它的特性,需要追溯到C标准库中的fopen()函数,定义如下
"w'' Truncate file to zero length or create text file for writing. The stream is positioned at the beginning of the file.
我从没见过你这么干的。
我不明白你是怎么把 “打开→读/写→关闭”这个过程理解成这样子的。我理解中多次打开同一文件是不应出现的行为。
    def writeFile() :
        file = open('test.txt','w+')
        file.write('testtesttest')
        file.write('\n')
        file.write('new line')
        file.close()
open的各个参数功能应该会有相应的讲解,简单说题中所讲:
'w'打开并清空文件,如果是没有文件则重新创建。

如果需要你多次操作能够写入,需要用‘a'的参数。如果你把你第二段代码的'w'改成'a'的话其实你也会发现没有得到预期的效果。原因何在呢?其实,文件的写入位置很巧妙,有点类似于C语言种的指针操作。而每次重新打开之后,指针又重新归零。如果是你写入的第一个字符串很长的话,你就会发现还是保留了一部分信息的。
简单写一下例子如下:
关于python,请教这两个程序有什么不同,为什么运行结果不一样?如上面的代码,每次打开之后全都清空文件。最后,第6行代码把文件清空。
结果如下:
关于python,请教这两个程序有什么不同,为什么运行结果不一样?
如果换成'a',那么每次重新打开的话,写入从文件开头写入。
代码以及结果如下(需要注意的是,后面我故意写的那一串字母tttttt,由于每次写入的位置是开始,但是写入的长度不够,因此后面的tttt等字符没有被覆盖掉):
关于python,请教这两个程序有什么不同,为什么运行结果不一样?
关于python,请教这两个程序有什么不同,为什么运行结果不一样?
再看一个例子,把追加参数改成'a+'(这样,写入的“指针就一直保留在上次的位置”):
关于python,请教这两个程序有什么不同,为什么运行结果不一样?
关于python,请教这两个程序有什么不同,为什么运行结果不一样? 基础太重要了,只open不close就是在耍流氓。建议去学学C/C++,看看异地中午文件句柄只open不close是什么情况。 答案就像你说的那样,每次用open('test.txt','w')打开文件时,都会把前面的清空。如果不清楚这个过程中到底发生了什么,可以在每个write下面加上print打印出来
open('test.txt','w').write('jdhfjkf')
print open('test.txt','r').readlines()
open('test.txt','w').write('\n')
print open('test.txt','r').readlines()
open('test.txt','w').write('zbvbvxsg')
print open('test.txt','r').readlines()
open('test.txt','w').close()

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
布尔教育jQuery实战视频教程
布尔教育jQuery实战视频教程

共37课时 | 7.8万人学习

jQuery基础视频教程
jQuery基础视频教程

共36课时 | 7.2万人学习

李炎恢jquery基础视频教程
李炎恢jquery基础视频教程

共66课时 | 15.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号