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

python教程评论398 views阅读模式

第一个程序

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,请教这两个程序有什么不同,为什么运行结果不一样?如上面的代码,每次打开之后全都清空文件。最后,第6行代码把文件清空。

结果如下:


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

如果换成'a',那么每次重新打开的话,写入从文件开头写入。

代码以及结果如下(需要注意的是,后面我故意写的那一串字母tttttt,由于每次写入的位置是开始,但是写入的长度不够,因此后面的tttt等字符没有被覆盖掉):


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


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

再看一个例子,把追加参数改成'a+'(这样,写入的“指针就一直保留在上次的位置”):


关于python,请教这两个程序有什么不同,为什么运行结果不一样?
关于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()
  • 微信
  • 分享
  • 相关标签:write test open txt zbvbvxsg
  • 本文原创发布php教程 ,转载请注明出处,感谢您的尊重!
    • 上一篇:做数据分析里有哪些Python能做,而MATLAB不能做的?
    • 下一篇:设计模式(design pattern)在Java中比较常见,在其他编程语言中也同等重要吗?

    相关文章

    相关视频

    • 在Django框架中运行Python应用全攻略
    • 在Python的Django框架中创建和使用模版
    • python获取元素在数组中索引号的方法
    • 浅谈python中截取字符函数strip,lstr...
    • 关于python,请教这两个程序有什么不同,为什么...
    • HTML DOM write() 方法
    • FileReader与FileWriter
    • Python执行环境及doctest模块
    • FileOutputStream的三个write()方法
    • test 和 exec方法

    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论

  • 立即提交

    专题推荐

    • 独孤九贱-php全栈开发教程

      全栈 100W+

      主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

    • 玉女心经-web前端开发教程

      入门 50W+

      主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

    • 天龙八部-实战开发教程

      实战 80W+

      主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

    作者信息

    php教程

    认证0级讲师

    最近文章

    发布技术文章

    • 最新文章
    • 热门排行

    • python之禅怎么打出来
    • python怎么学
    • boosting和bootstrap区别
    • python库是什么意思
    • python卸载后怎么也安装不上
    • python安装后怎么不见了
    • python怎么卸载模块
    • python能做什么?是什么?

    • pickle库的使用详解
    • Anaconda的新手使用大全
    • python爬虫是什么?为什么把python叫做爬虫?
    • Python微信库:itchat的用法详解
    • 关于python3学习基础知识总结
    • python爬虫是什么
    • 使用Python可以做什么
    • python如何实现可视化热力图

    推荐视频教程

  • javascript初级视频教程
  • jquery 基础视频教程
  • 视频教程分类

    • php视频教程
    • html视频教程
    • css视频教程
    • JS视频教程

    企鹅博客
    • 本文由 发表于 2020年9月24日 10:31:05
    • 转载请务必保留本文链接:https://www.qieseo.com/333315.html

    发表评论