Cómo copiar archivos
¿Cómo copio un archivo en Python?
Aceptado
shutil
Tiene 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
src
a un archivo llamadodst
. Ambossrc
ydst
deben ser el nombre completo de los archivos, incluida la ruta. - La ubicación de destino debe poder escribirse; de lo contrario,
IOError
se planteará una excepción. - Si
dst
ya existe, será reemplazado. - Los archivos especiales, como caracteres o dispositivos de bloques y tuberías, no se pueden copiar con esta función.
- Con
copy
ysrc
sondst
nombres de rutas dados comostr
s.
Otro shutil
método a considerar es shutil.copy2()
. Es similar pero conserva más metadatos (por ejemplo, marcas de tiempo).
Si usa os.path
operaciones, use copy
en lugar de copyfile
. copyfile
sólo aceptará cadenas.
Función | Copia metadatos |
Permisos de copia |
Utiliza objeto de archivo | El destino puede ser el directorio |
---|---|---|---|---|
Shutil.copia | No | Sí | No | Sí |
Shutil.copiararchivo | No | No | No | No |
Shutil.copia2 | Sí | Sí | No | Sí |
Shutil.copyfileobj | No | No | Sí | No |
copy2(src,dst)
suele ser más útil que copyfile(src,dst)
porque:
- permite
dst
ser 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
En Python, puedes copiar los archivos usando
shutil
móduloos
módulosubprocess
módulo
import os
import shutil
import subprocess
1) Copiar archivos usando shutil
el 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 os
el 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 subprocess
el 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)
Puede utilizar una de las funciones de copia del shutil
paquete:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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')