【问题标题】:How to keep writing in a moved file with the same file object?如何继续写入具有相同文件对象的移动文件?
【发布时间】:2016-05-29 04:07:22
【问题描述】:

如果我打开一个文件

fileObj = open(test.txt, 'wb+')

在里面写一些东西

fileObj.write(someBytes)

然后决定把它移到别的地方

shutil.move('test.txt', '/tempFolder')

然后继续写下去

fileObj.write(someMoreBytes)

会发生什么?

几个观察:

  1. /tempFolder/test.txt 处的文件似乎只包含写入的第一组字节。
  2. 文件移动后,第一组字节似乎已从文件对象中删除
  3. 在文件移动后对文件对象的后续写入似乎不会在磁盘上test.txt 处创建新文件,那么这些字节会发生什么情况?它们留在内存中的文件对象中?

现在我的主要问题是:如何保持相同的文件对象写入移动的文件?因为本质上文件是相同的,它只有改变位置。还是不可能?

感谢您的帮助!

【问题讨论】:

    标签: python file-io filesystems python-3.5 file-move


    【解决方案1】:

    在移动您的文件 shutil.move('test.txt', '/tempFolder') 后,并想继续向其中添加字节,您需要创建一个新变量,指示新文件的位置。

    由于您将文件移动到新位置,因此 fileObj.write(someMoreBytes) 不再写入字节,因为您最初创建的对象已被移动。因此,您必须重新打开一个新文件以“继续”向其中写入字节,或者如上所述指定新位置,以将字节添加到现有文件中。

    例如:

    import os
    f=open('existingfile.txt', 'wb+')
    
    f.write('somebytes')
    f.close()
    os.rename('currentPath\existingfile.txt', 'NewPath\existingfile.txt')
    
    #reopen file - Repeat
    

    【讨论】:

    • 我知道重新打开文件会起作用,但我的问题是:如何为文件保留相同的文件对象?我猜你的答案是:不可能。
    • 就我而言不可能
    【解决方案2】:

    fobject 不知道您移动了文件。你可以通过添加

    fileObj = open("tempFolder/test.txt", "wb+")
    

    搬家之后。

    【讨论】:

    • 我知道重新打开文件会起作用,但我的问题是:如何为文件保留相同的文件对象?我猜你的答案是:不可能。
    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2014-02-17
    • 2012-04-24
    • 2018-07-06
    • 1970-01-01
    相关资源
    最近更新 更多