CJ2 2020-11-02 14:56 采纳率: 0%
浏览 65

求大神解答:python 文件读取与写入时,tell()函数显示文件指针位置居然会对运行结果产生影响?

运行python程序对文件 1.txt 进行读取与写入操作,运行前 1.txt 的内容均是

123456789
asdfghjkl


程序1:

f1 = open('1.txt', 'r+')

f1.write('***')
print(f'文件指针位置是{f1.tell()}') # 与程序2的区别在于这句代码会被注释掉
print(f1.read(1))

f1.close()

运行结果是:

文件指针位置是3
4

运行后 1.txt 的内容是:

***456789
asdfghjkl

上述结果与预期相符,但注释掉代码“print(f'文件指针位置是{f1.tell()}')”后,运行结果居然和上面不同:

程序2:

f1 = open('1.txt', 'r+')

f1.write('***')
#print(f'文件指针位置是{f1.tell()}') 
print(f1.read(1))

f1.close()

运行结果是:

1

运行后 1.txt 的内容是:

123456789
asdfghjkl***

有两个问题:(1)read出来的数据居然是1而不是4;(2)'***'写入位置居然是末尾,这是怎么回事呢?

太迷惑了,求大神解读呀!

  • 写回答

2条回答 默认 最新

  • PythonJavaC++go 2020-11-02 22:05
    关注

    因为一组open到close中间的操作,write还只是在缓存中,只有close的时候(或明确把缓存写入本地)才进行写入本地。
    f.tell要获取当前的指针,会先把缓存写入本地再获取指针;
    而你第二种没有显式操作缓存写入本地,到read的时候,指针就跳到尾部了。然后close(close前会查看缓存,有的话就会写入本地)

    评论

报告相同问题?

悬赏问题

  • ¥15 为什么跑这个代码,文件显示不在呀
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?