Discuss / Python / 同时对一个文件创建两个文件对象会怎样?

同时对一个文件创建两个文件对象会怎样?

Topic source

UTOO_NAIVE

#1 Created at ... [Delete] [Delete and Lock User]

我先打开一个文件

f1 = open('c:/Users/Administrator/Desktop/e.txt','w')

f1写一次

f1.write('f1 write first\n')

在没有关闭的情况下又open一个

f2 = open('c:/Users/Administrator/Desktop/e.txt','w')

用f2写一次

f2.write('f2 write first\n')

再用f1写一次

f1.write('f1 write second\n')

结果文件中的内容是

  • f2 write first
  • f1 write second

谁能跟我解释一下这个? 'f1 write first' 被覆盖了吗?

不能解释,毕竟我是新手,但我们可以做个实验:

1.先回顾楼主的代码

f1 = open('./test.txt', 'w')
f1.write('f1 write first\n')

f2 = open('./test.txt', 'w')
f2.write('f2 write first\n')

f1.write('f1 write second\n')

文件结果如下:

f2 write first
f1 write second

2.我们对代码重新排序看看

f1 = open('./test.txt', 'w')
f1.write('f1 write first\n')
f1.write('f1 write second\n')

f2 = open('./test.txt', 'w')
f2.write('f2 write first\n')

文件结果如下:

f2 write first
f1 write second

可以得出初步的结论 f1 写入的内容是被 f2 一行一行代替的。但是我对老师原文的理解应该是 f1 写入的内容被全部删除才对,那么实验继续

3.关闭 f1 再写入 f1

f1 = open('./test.txt', 'w')
f1.write('f1 write first\n')
f1.write('f1 write second\n')
f1.close()

f2 = open('./test.txt', 'w')
f2.write('f2 write first\n')

文件结果如下:

f2 write first

这里我们证明了老师说的其实也是对的,不过情况和我们的不一样

4.那么 f2 是怎么覆盖 f1 的?

我们稍微改下,注意这是不一样的

f1 = open('./test.txt', 'w')
f1.write('f1 write first -- f1 write first')
f1.write('\nf1 write second')

f2 = open('./test.txt', 'w')
f2.write('f2 write first')

文件结果如下:

f2 write first -- f1 write first
f1 write second

实验结论:

  1. 老师没骗我们。
  2. 同时对一个文件打开两次,先打开的 f1 写入的内容会被后打开的 f2 覆盖,但不是一行一行地覆盖,那到底是一个字一个字地覆盖还是怎么样的话,这个思考题就留给你们了。

写了好长,但愿没写错字吧。。。

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

不用分析了,不关闭文件再打开相同文件0分。

哈哈,发现老师

记住了,以后可一定记得是这么写的啊

with open('./test.js', 'rb') as f:
    f.readlines()

UTOO_NAIVE

#5 Created at ... [Delete] [Delete and Lock User]

被翻牌了,哈哈 我是刻意想试一下不关闭怎样,不是忘记关了^_^


  • 1

Reply