Como copiar todos os arquivos presentes em um diretório para outro diretório usando Python. Eu tenho o caminho de origem e o caminho de destino como string.
Você pode usar os.listdir () para obter os arquivos no diretório de origem, os.path.isfile () para ver se eles são arquivos regulares (incluindo links simbólicos em sistemas * nix) e shutil.copy para fazer a cópia.
O código a seguir copia apenas os arquivos regulares do diretório de origem para o diretório de destino (presumo que você não queira que nenhum subdiretório seja copiado).
import os
import shutil
src_files = os.listdir(src)for file_name in src_files:
full_file_name = os.path.join(src, file_name)if os.path.isfile(full_file_name):
shutil.copy(full_file_name, dest)
Dest deve ser algo como C: \ myfolder ou C: \ myfolder \ filename.ext?
Steve Byrne
4
@StevenByrne Pode ser qualquer um, dependendo se você também deseja renomear o arquivo. Caso contrário, desté o nome do diretório. shutil.copy(src, dst)"copia o arquivo src para o arquivo ou diretório dst .... Se dst especificar um diretório, o arquivo será copiado para dst usando o nome de arquivo base de src."
30
Se você não quiser copiar a árvore inteira (com subdiretórios, etc.), use ou glob.glob("path/to/dir/*.*")para obter uma lista de todos os nomes de arquivos, faça um loop na lista e use shutil.copypara copiar cada arquivo.
for filename in glob.glob(os.path.join(source_dir,'*.*')):
shutil.copy(filename, dest_dir)
Nota: Você pode ter que verificar os resultados glob com os.path.isfile () para ter certeza de que são nomes de arquivos. Veja também a resposta da GreenMatt. Embora glob retorne apenas o nome do arquivo como os.listdir, ele ainda retorna nomes de diretório também. O ' . 'padrão pode ser suficiente, desde que você não tenha nomes de arquivos sem extensão ou pontos nos nomes de diretório.
Aqui está outro exemplo de função de cópia recursiva que permite copiar o conteúdo do diretório (incluindo subdiretórios) um arquivo por vez, que usei para resolver este problema.
import os
import shutil
def recursive_copy(src, dest):"""
Copy each file from src dir to dest dir, including sub-directories.
"""for item in os.listdir(src):
file_path = os.path.join(src, item)# if item is a file, copy itif os.path.isfile(file_path):
shutil.copy(file_path, dest)# else if item is a folder, recurse elif os.path.isdir(file_path):
new_dest = os.path.join(dest, item)
os.mkdir(new_dest)
recursive_copy(file_path, new_dest)
EDIT: Se você puder, definitivamente use shutil.copytree(src, dest). Isso requer que essa pasta de destino ainda não exista. Se você precisar copiar arquivos para uma pasta existente, o método acima funciona bem!
Respostas:
Você pode usar os.listdir () para obter os arquivos no diretório de origem, os.path.isfile () para ver se eles são arquivos regulares (incluindo links simbólicos em sistemas * nix) e shutil.copy para fazer a cópia.
O código a seguir copia apenas os arquivos regulares do diretório de origem para o diretório de destino (presumo que você não queira que nenhum subdiretório seja copiado).
fonte
dest
é o nome do diretório.shutil.copy(src, dst)
"copia o arquivo src para o arquivo ou diretório dst .... Se dst especificar um diretório, o arquivo será copiado para dst usando o nome de arquivo base de src."Se você não quiser copiar a árvore inteira (com subdiretórios, etc.), use ou
glob.glob("path/to/dir/*.*")
para obter uma lista de todos os nomes de arquivos, faça um loop na lista e useshutil.copy
para copiar cada arquivo.fonte
Veja o shutil nos documentos do Python , especificamente o comando copytree .
fonte
fonte
fonte
Aqui está outro exemplo de função de cópia recursiva que permite copiar o conteúdo do diretório (incluindo subdiretórios) um arquivo por vez, que usei para resolver este problema.
EDIT: Se você puder, definitivamente use
shutil.copytree(src, dest)
. Isso requer que essa pasta de destino ainda não exista. Se você precisar copiar arquivos para uma pasta existente, o método acima funciona bem!fonte