recorrer manejo imprimir generar ejercicios directorios desde crear copiar carpetas archivos archivo python file copy filesystems copyfile

imprimir - manejo de archivos y carpetas en python



¿Cómo copio un archivo en Python? (14)

¿Cómo copio un archivo en Python?

No pude encontrar nada bajo os


Copiar un archivo es una operación relativamente sencilla como se muestra en los ejemplos a continuación, pero en su lugar, debe usar el módulo shutil stdlib para eso.

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)

Si desea copiar por nombre de archivo, podría hacer algo como esto:

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)


Ejemplo de copia de directorio y archivo - De Tim Golden''s Python Stuff:

http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html

import os import shutil import tempfile filename1 = tempfile.mktemp (".txt") open (filename1, "w").close () filename2 = filename1 + ".copy" print filename1, "=>", filename2 shutil.copy (filename1, filename2) if os.path.isfile (filename2): print "Success" dirname1 = tempfile.mktemp (".dir") os.mkdir (dirname1) dirname2 = dirname1 + ".copy" print dirname1, "=>", dirname2 shutil.copytree (dirname1, dirname2) if os.path.isdir (dirname2): print "Success"


En Python, puedes copiar los archivos usando

import os import shutil import subprocess

1) Copiando archivos usando el módulo shutil

firma docs.python.org/3/library/shutil.html#shutil.copyfile

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

firma shutil.copy

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

firma shutil.copy2

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

firma shutil.copyfileobj

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) Copiando archivos usando el módulo os

firma os.popen

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'')

firma os.system

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

3) Copiando archivos utilizando módulo de subprocess

firma subprocess.call

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)

firma subprocess.check_output

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)


En primer lugar, hice una lista exhaustiva de métodos de cierre para su referencia.

shutil_methods = {''copy'':[''shutil.copyfileobj'', ''shutil.copyfile'', ''shutil.copymode'', ''shutil.copystat'', ''shutil.copy'', ''shutil.copy2'', ''shutil.copytree'',], ''move'':[''shutil.rmtree'', ''shutil.move'',], ''exception'': [''exception shutil.SameFileError'', ''exception shutil.Error''], ''others'':[''shutil.disk_usage'', ''shutil.chown'', ''shutil.which'', ''shutil.ignore_patterns'',] }

En segundo lugar, explicar los métodos de copia en ejemplos:

  1. shutil.copyfileobj(fsrc, fdst[, length]) manipula objetos abiertos

In [3]: src = ''~/Documents/Head+First+SQL.pdf'' In [4]: dst = ''~/desktop'' In [5]: shutil.copyfileobj(src, dst) AttributeError: ''str'' object has no attribute ''read'' #copy the file object In [7]: with open(src, ''rb'') as f1,open(os.path.join(dst,''test.pdf''), ''wb'') as f2: ...: shutil.copyfileobj(f1, f2) In [8]: os.stat(os.path.join(dst,''test.pdf'')) Out[8]: os.stat_result(st_mode=33188, st_ino=8598319475, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067347, st_mtime=1516067335, st_ctime=1516067345)

  1. shutil.copyfile(src, dst, *, follow_symlinks=True) Copie y cambie el nombre

In [9]: shutil.copyfile(src, dst) IsADirectoryError: [Errno 21] Is a directory: ~/desktop'' #so dst should be a filename instead of a directory name

  1. shutil.copy() Copia sin prever los metadatos

In [10]: shutil.copy(src, dst) Out[10]: ~/desktop/Head+First+SQL.pdf'' #check their metadata In [25]: os.stat(src) Out[25]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066425, st_mtime=1493698739, st_ctime=1514871215) In [26]: os.stat(os.path.join(dst, ''Head+First+SQL.pdf'')) Out[26]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066427, st_mtime=1516066425, st_ctime=1516066425) # st_atime,st_mtime,st_ctime changed

  1. shutil.copy2() Copia con previsualización de los metadatos

In [30]: shutil.copy2(src, dst) Out[30]: ~/desktop/Head+First+SQL.pdf'' In [31]: os.stat(src) Out[31]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067055, st_mtime=1493698739, st_ctime=1514871215) In [32]: os.stat(os.path.join(dst, ''Head+First+SQL.pdf'')) Out[32]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067063, st_mtime=1493698739, st_ctime=1516067055) # Preseved st_mtime

  1. `shutil.copytree ()` `

Copie recursivamente un árbol de directorios completo enraizado en src, devolviendo el directorio de destino


Mira el módulo shutil . Contiene la función de archivo de copia ( src , dst )


Para archivos grandes, lo que hice fue leer línea por línea y leer cada línea en una matriz. Luego, una vez que la matriz haya alcanzado un cierto tamaño, agréguela a un archivo nuevo.

for line in open("file.txt", "r"): list.append(line) if len(list) == 1000000: output.writelines(list) del list[:]


Podría usar os.system(''cp nameoffilegeneratedbyprogram /otherdirectory/'')

o como lo hice yo,

os.system(''cp ''+ rawfile + '' rawdata.dat'')

donde rawfile es el nombre que había generado dentro del programa.

Esta es una solución solo para Linux


Puede usar una de las funciones de copia del paquete shutil :

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Function preserves supports accepts copies other permissions directory dest. file obj metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― shutil.copy ✔ ✔ ☐ ☐ shutil.copy2 ✔ ✔ ☐ ✔ docs.python.org/3/library/shutil.html#shutil.copyfile ☐ ☐ ☐ ☐ shutil.copyfileobj ☐ ☐ ✔ ☐ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Ejemplo:

import shutil shutil.copy(''/etc/hostname'', ''/var/tmp/testhostname'')


Sugiero usar Swati''s respuesta Swati''s , pero suponiendo que tenga un archivo de texto y no quiera usar bibliotecas adicionales en su código para copiarlo, puede usar la siguiente frase de una línea:

with open(source, ''r'') as src, open(dest, ''w'') as dst: dst.write(src.read())


Utilice el shutil .

copyfile(src, dst)

Copie el contenido del archivo llamado src a un archivo llamado dst. La ubicación de destino debe ser escribible; de lo contrario, se generará una excepción IOError. Si dst ya existe, será reemplazado. Los archivos especiales como los dispositivos de caracteres o bloques y las tuberías no se pueden copiar con esta función. src y dst son nombres de ruta dados como cadenas.

Eche un vistazo a los filesys de archivos para todas las funciones de manejo de archivos y directorios disponibles en los módulos estándar de Python.


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

from shutil import copyfile copyfile(src, dst)

Copie el contenido del archivo llamado src a un archivo llamado dst . La ubicación de destino debe ser escribible; de lo contrario, se generará una excepción IOError . Si dst ya existe, será reemplazado. Los archivos especiales como los dispositivos de caracteres o bloques y las tuberías no se pueden copiar con esta función. src y dst son nombres de ruta dados como cadenas.


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

  • permite que dst sea ​​un directorio (en lugar del nombre de archivo de destino completo), en cuyo caso se utiliza el basename de src para crear el nuevo archivo;
  • conserva la modificación original y la información de acceso (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


┌──────────────────┬───────────────┬──────────────────┬──────────────┬───────────┐ │ Function │Copies metadata│Copies permissions│Can use buffer│Dest dir OK│ ├──────────────────┼───────────────┼──────────────────┼──────────────┼───────────┤ │shutil.copy │ No │ Yes │ No │ Yes │ │shutil.copyfile │ No │ No │ No │ No │ │shutil.copy2 │ Yes │ Yes │ No │ Yes │ │shutil.copyfileobj│ No │ No │ Yes │ No │ └──────────────────┴───────────────┴──────────────────┴──────────────┴───────────┘


from subprocess import call call("cp -p <file> <file>", shell=True)