Cómo copiar archivos

Resuelto Matt asked hace 15 años • 21 respuestas

¿Cómo copio un archivo en Python?

Matt avatar Sep 24 '08 02:09 Matt
Aceptado

shutilTiene muchos métodos que puedes usar. Uno de los cuales es:

import shutil

shutil.copyfile(src, dst)

# 2nd option
shutil.copy(src, dst)  # dst can be a folder; use shutil.copy2() to preserve timestamp
  • Copie el contenido del archivo nombrado srca un archivo llamado dst. Ambos srcy dstdeben ser el nombre completo de los archivos, incluida la ruta.
  • La ubicación de destino debe poder escribirse; de lo contrario, IOErrorse planteará una excepción.
  • Si dstya existe, será reemplazado.
  • Los archivos especiales, como caracteres o dispositivos de bloques y tuberías, no se pueden copiar con esta función.
  • Con copyy srcson dstnombres de rutas dados como strs.

Otro shutilmétodo a considerar es shutil.copy2(). Es similar pero conserva más metadatos (por ejemplo, marcas de tiempo).

Si usa os.pathoperaciones, use copyen lugar de copyfile. copyfilesólo aceptará cadenas.

Swati avatar Sep 23 '2008 19:09 Swati
Función Copia
metadatos

Permisos de copia
Utiliza objeto de archivo El destino
puede ser el directorio
Shutil.copia No No
Shutil.copiararchivo No No No No
Shutil.copia2 No
Shutil.copyfileobj No No No
jezrael avatar May 20 '2015 20:05 jezrael

copy2(src,dst)suele ser más útil que copyfile(src,dst)porque:

  • permite dstser un directorio (en lugar del nombre de archivo de destino completo), en cuyo caso se utiliza el nombre base de para crear el nuevo archivo;src
  • conserva la información de acceso y modificación original (mtime y atime) en los metadatos del archivo (sin embargo, esto conlleva una ligera sobrecarga).

Aquí hay un breve ejemplo:

import shutil
shutil.copy2('/src/dir/file.ext', '/dst/dir/newname.ext') # complete target filename given
shutil.copy2('/src/file.ext', '/dst/dir') # target filename is /dst/dir/file.ext
unmounted avatar Sep 23 '2008 19:09 unmounted

En Python, puedes copiar los archivos usando

  • shutilmódulo
  • osmódulo
  • subprocessmódulo

import os
import shutil
import subprocess

1) Copiar archivos usando shutilel módulo

shutil.copyfile firma

shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)

# example    
shutil.copyfile('source.txt', 'destination.txt')

shutil.copy firma

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy('source.txt', 'destination.txt')

shutil.copy2 firma

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy2('source.txt', 'destination.txt')  

shutil.copyfileobj firma

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) Copiar archivos usando osel módulo

os.popen firma

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 firma

os.system(command)


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

# In Windows
os.system('copy source.txt destination.txt')

3) Copiar archivos usando subprocessel módulo

subprocess.call firma

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 firma

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)

kmario23 avatar Jan 22 '2018 03:01 kmario23

Puede utilizar una de las funciones de copia del shutilpaquete:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
La función conserva admite acepta copias otras
                      directorio de permisos dest. metadatos del objeto de archivo  
―――――――――――――――――――――――――――――――――――――――――――――――――――――― ----------------------------------
Shutil.copia               ✔ ✔ ☐ ☐
 Shutil.copia2              ✔ ✔ ☐ ✔
 Shutil.copyfile           ☐ ☐ ☐ ☐
 Shutil.copyfileobj        ☐ ☐ ✔ ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Ejemplo:

import shutil
shutil.copy('/etc/hostname', '/var/tmp/testhostname')
maxschlepzig avatar Jul 09 '2017 11:07 maxschlepzig