Python에서 여러 파일 복사
Python을 사용하여 한 디렉토리에 있는 모든 파일을 다른 디렉토리에 복사하는 방법.소스 경로와 대상 경로를 문자열로 지정합니다.
os.listdir()를 사용하여 소스 디렉토리, os.path.isfile()의 파일을 가져와 일반 파일(*nix 시스템의 심볼릭 링크 포함)인지 확인하고 shutil.copy를 사용하여 복사할 수 있습니다.
다음 코드는 원본 디렉터리에서 대상 디렉터리로 일반 파일만 복사합니다(하위 디렉터리는 복사하지 않으려는 것으로 가정합니다).
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)
트리 전체를 복사하지 않으려면(하위 디어 등) 또는glob.glob("path/to/dir/*.*")
모든 파일 이름의 목록을 가져오려면 목록을 루프하여 사용합니다.shutil.copy
각 파일을 복사합니다.
for filename in glob.glob(os.path.join(source_dir, '*.*')):
shutil.copy(filename, dest_dir)
Python 문서, 특히 copytree 명령에서 shutil을 확인합니다.
대상 디렉터리가 이미 있는 경우 다음을 시도하십시오.
shutil.copytree(source, destination, dirs_exist_ok=True)
import os
import shutil
os.chdir('C:\\') #Make sure you add your source and destination path below
dir_src = ("C:\\foooo\\")
dir_dst = ("C:\\toooo\\")
for filename in os.listdir(dir_src):
if filename.endswith('.txt'):
shutil.copy( dir_src + filename, dir_dst)
print(filename)
def recursive_copy_files(source_path, destination_path, override=False):
"""
Recursive copies files from source to destination directory.
:param source_path: source directory
:param destination_path: destination directory
:param override if True all files will be overridden otherwise skip if file exist
:return: count of copied files
"""
files_count = 0
if not os.path.exists(destination_path):
os.mkdir(destination_path)
items = glob.glob(source_path + '/*')
for item in items:
if os.path.isdir(item):
path = os.path.join(destination_path, item.split('/')[-1])
files_count += recursive_copy_files(source_path=item, destination_path=path, override=override)
else:
file = os.path.join(destination_path, item.split('/')[-1])
if not os.path.exists(file) or override:
shutil.copyfile(item, file)
files_count += 1
return files_count
다음은 디렉터리(하위 디렉터리 포함)의 내용을 한 번에 하나씩 복사할 수 있는 재귀 복사 함수의 다른 예입니다. 이 문제를 해결하는 데 사용했습니다.
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 it
if 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)
편집: 할 수 있다면, 꼭 사용하세요.shutil.copytree(src, dest)
이를 위해서는 대상 폴더가 이미 존재하지 않아야 합니다.기존 폴더에 파일을 복사해야 하는 경우 위의 방법이 잘 작동합니다!
최상위 응답은 한 문자열을 다른 문자열과 결합해야 하는 경우 5행의 파일 이름을 가진 목록에 가입하려고 하기 때문에 런타임 오류를 발생시킵니다.pathSrc라는 다른 변수를 생성하고 join 인수에 사용합니다.또한 pathDest라는 다른 변수를 생성하여 마지막 줄에 file_name으로 연결합니다.나는 또한 모듈 전체가 아닌 shutil에서 필요한 방법을 수입했습니다.
import os
from shutil import copyfile
pathSrc = "the folder where the src files are"
pathDest = "the folder where the dest files are going"
src_files = os.listdir(src)
for file_name in src_files:
full_file_name = os.path.join(pathSrc, file_name)
if os.path.isfile(full_file_name):
shutil.copy(full_file_name, pathDest + file_name)
왜 한 줄도 안 돼요?
import os
import shutil
dest = 'path/to/destination/folder'
src = 'path/to/source/folder/' # mind the '/' at the end
[shutil.copy(src+fn, dest) for fn in os.listdir(src)]
또는 오류 처리 조건이 있는 경우
import os
import shutil
dest = 'path/to/destination/folder'
src = 'path/to/source/folder/' # mind the '/' at the end
try:
[shutil.copy(src+fn, dest) for fn in os.listdir(src)]
except:
print('files already exist in', dest)
언급URL : https://stackoverflow.com/questions/3397752/copy-multiple-files-in-python
'source' 카테고리의 다른 글
Angular 플랫폼 브라우저란 무엇입니까? (0) | 2023.08.10 |
---|---|
2명의 사용자가 MySQL을 사용하여 웹 응용 프로그램에서 동일한 데이터를 편집하지 못하도록 하는 방법(가능한 경우 CodeIgniter 사용) (0) | 2023.08.10 |
Android 부팅 화면 이미지 크기가 모든 기기에 적합합니다. (0) | 2023.08.10 |
마리아의 문자를 사용한 이진 데이터 형식 조합DB (0) | 2023.08.10 |
장고: 잘못 구성됨:SECRET_KEY 설정은 비워 둘 수 없습니다. (0) | 2023.08.10 |