How do I copy a file in Python?

前端 未结 16 2188
隐瞒了意图╮
隐瞒了意图╮ 2020-11-21 07:12

How do I copy a file in Python?

I couldn\'t find anything under os.

相关标签:
16条回答
  • 2020-11-21 07:26

    Copying a file is a relatively straightforward operation as shown by the examples below, but you should instead use the shutil stdlib module for that.

    def copyfileobj_example(source, dest, buffer_size=1024*1024):
        """      
        Copy a file from source to dest. source and dest
        must be file-like objects, i.e. any object with a read or
        write method, like for example StringIO.
        """
        while True:
            copy_buffer = source.read(buffer_size)
            if not copy_buffer:
                break
            dest.write(copy_buffer)
    

    If you want to copy by filename you could do something like this:

    def copyfile_example(source, dest):
        # Beware, this example does not handle any edge cases!
        with open(source, 'rb') as src, open(dest, 'wb') as dst:
            copyfileobj_example(src, dst)
    
    0 讨论(0)
  • 2020-11-21 07:27
    ┌──────────────────┬────────┬───────────┬───────┬────────────────┐
    │     Function     │ Copies │   Copies  │Can use│   Destination  │
    │                  │metadata│permissions│buffer │may be directory│
    ├──────────────────┼────────┼───────────┼───────┼────────────────┤
    │shutil.copy       │   No   │    Yes    │   No  │      Yes       │
    │shutil.copyfile   │   No   │     No    │   No  │       No       │
    │shutil.copy2      │  Yes   │    Yes    │   No  │      Yes       │
    │shutil.copyfileobj│   No   │     No    │  Yes  │       No       │
    └──────────────────┴────────┴───────────┴───────┴────────────────┘
    
    0 讨论(0)
  • 2020-11-21 07:27

    As of Python 3.5 you can do the following for small files (ie: text files, small jpegs):

    from pathlib import Path
    
    source = Path('../path/to/my/file.txt')
    destination = Path('../path/where/i/want/to/store/it.txt')
    destination.write_bytes(source.read_bytes())
    

    write_bytes will overwrite whatever was at the destination's location

    0 讨论(0)
  • 2020-11-21 07:31

    For large files, what I did was read the file line by line and read each line into an array. Then, once the array reached a certain size, append it to a new file.

    for line in open("file.txt", "r"):
        list.append(line)
        if len(list) == 1000000: 
            output.writelines(list)
            del list[:]
    
    0 讨论(0)
  • 2020-11-21 07:37

    In Python, you can copy the files using

    • shutil module
    • os module
    • subprocess module

    import os
    import shutil
    import subprocess
    

    1) Copying files using shutil module

    shutil.copyfile signature

    shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)
    
    # example    
    shutil.copyfile('source.txt', 'destination.txt')
    

    shutil.copy signature

    shutil.copy(src_file, dest_file, *, follow_symlinks=True)
    
    # example
    shutil.copy('source.txt', 'destination.txt')
    

    shutil.copy2 signature

    shutil.copy2(src_file, dest_file, *, follow_symlinks=True)
    
    # example
    shutil.copy2('source.txt', 'destination.txt')  
    

    shutil.copyfileobj signature

    shutil.copyfileobj(src_file_object, dest_file_object[, length])
    
    # example
    file_src = 'source.txt'  
    f_src = open(file_src, 'rb')
    
    file_dest = 'destination.txt'  
    f_dest = open(file_dest, 'wb')
    
    shutil.copyfileobj(f_src, f_dest)  
    

    2) Copying files using os module

    os.popen signature

    os.popen(cmd[, mode[, bufsize]])
    
    # example
    # In Unix/Linux
    os.popen('cp source.txt destination.txt') 
    
    # In Windows
    os.popen('copy source.txt destination.txt')
    

    os.system signature

    os.system(command)
    
    
    # In Linux/Unix
    os.system('cp source.txt destination.txt')  
    
    # In Windows
    os.system('copy source.txt destination.txt')
    

    3) Copying files using subprocess module

    subprocess.call signature

    subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
    
    # example (WARNING: setting `shell=True` might be a security-risk)
    # In Linux/Unix
    status = subprocess.call('cp source.txt destination.txt', shell=True) 
    
    # In Windows
    status = subprocess.call('copy source.txt destination.txt', shell=True)
    

    subprocess.check_output signature

    subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
    
    # example (WARNING: setting `shell=True` might be a security-risk)
    # In Linux/Unix
    status = subprocess.check_output('cp source.txt destination.txt', shell=True)
    
    # In Windows
    status = subprocess.check_output('copy source.txt destination.txt', shell=True)
    

    0 讨论(0)
  • 2020-11-21 07:38

    Use the shutil module.

    copyfile(src, dst)
    

    Copy the contents of the file named src to a file named dst. The destination location must be writable; otherwise, an IOError exception will be raised. If dst already exists, it will be replaced. Special files such as character or block devices and pipes cannot be copied with this function. src and dst are path names given as strings.

    Take a look at filesys for all the file and directory handling functions available in standard Python modules.

    0 讨论(0)
提交回复
热议问题