在python中同时读取和写入同一文件

wnavrhmk  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(386)

可以同时读写同一个文件吗?我有一段代码:

with open(total_f, 'w') as f:
    s= len(resu)
    #print s
    f.write ("the total number is {}\n".format(s))
    f.write('\n'.join(map(str, resu)))

with open(total_f ,'r') as f:
    content = f.read()
    count = content.count("FFFF")
    print count

但我需要他们在一起,因为我想写的结果 count 在里面 total_f .
我试着把读写结合在一起,就像这样:

with open(total_f, 'rw') as f:# i want to read and write at the same time
    s= len(resu)
    content = f.read()
    count = content.count("FFFF")  
    #print s
    f.write ("the total number is {}\n".format(s))
    f.write ("the total number is {}\n".format(count))
    f.write('\n'.join(map(str, resu)))

但它仍然不起作用,所以我不确定这是否正确。

mftmpeh8

mftmpeh81#

目前尚不清楚您希望从书面文件中读取什么,因此我不保证此答案将按原样工作:它旨在显示您可能使用的工作流:

with open(total_f, 'w+') as f:
    s= len(resu)
    #print s
    f.write ("the total number is {}\n".format(s))
    pos_before_data = f.tell()
    f.write('\n'.join(map(str, resu)))

    f.seek(pos_before_data)
    content = f.read()
    count = content.count("FFFF")
    print count

关键是在中打开文件 'w+' 模式,如有必要,使用 f.tell()f.seek() 导航。打开 'r+' 如果文件已经存在并且您不想覆盖它。

hs1ihplo

hs1ihplo2#

您可以创建一个 contextmanager :

import contextlib
@contextlib.contextmanager
def post_results(total_f, resu):
  with open(total_f ,'r') as f:
    content = f.read()
    count = content.count("FFFF")
  yield count
  with open(total_f, 'w') as f:
    s= len(resu)
    f.write ("the total number is {}\n".format(s))
    f.write('\n'.join(map(str, resu)))

with post_results('filename.txt', 'string_val') as f:
  print(f)
``` `contextmanager` 创建一个进入和退出序列,使函数能够自动执行所需的最终执行序列。在这种情况下,, `count` 需要收集和打印,之后,存储在 `count` 需要写信给 `total_f` . 

相关问题