how to concisely create a temporary file that is a copy of another file in python

前端 未结 5 1394
孤城傲影
孤城傲影 2021-01-07 23:24

I know that it is possible to create a temporary file, and write the data of the file I wish to copy to it. I was just wondering if there was a function like:



        
5条回答
  •  孤街浪徒
    2021-01-07 23:44

    A variation on @tramdas's answer, accounting for the fact that the file cannot be opened twice on windows. This version ignores the preservation of the file extension.

    import os, shutil, tempfile
    
    def create_temporary_copy(src):
      # create the temporary file in read/write mode (r+)
      tf = tempfile.TemporaryFile(mode='r+b', prefix='__', suffix='.tmp')
    
      # on windows, we can't open the the file again, either manually
      # or indirectly via shutil.copy2, but we *can* copy
      # the file directly using file-like objects, which is what
      # TemporaryFile returns to us.
      # Use `with open` here to automatically close the source file
      with open(src,'r+b') as f:
        shutil.copyfileobj(f,tf)
    
      # display the name of the temporary file for diagnostic purposes
      print 'temp file:',tf.name
    
      # rewind the temporary file, otherwise things will go
      # tragically wrong on Windows
      tf.seek(0) 
      return tf
    
    # make a temporary copy of the file 'foo.txt'
    name = None
    
    with create_temporary_copy('foo.txt') as temp:
      name = temp.name
    
      # prove that it exists
      print 'exists', os.path.isfile(name) # prints True
    
      # read all lines from the file
      i = 0
      for line in temp:
        print i,line.strip()
        i += 1
    
      # temp.close() is implicit using `with`
    
    # prove that it has been deleted
    print 'exists', os.path.isfile(name) # prints False
    

提交回复
热议问题