2017-02-27 1 views
-1

약 12 ​​개의 하위 폴더에서 여러 개의 .mp4 및 .CR2 파일을 복사해야합니다. 여러 가지 코드 변형을 시도했으며 처음부터 시작하고 싶습니다.Python을 사용하여 여러 하위 폴더에서 특정 유형의 많은 파일을 복사하는 방법은 무엇입니까?

import os 
import shutil 
#os.chdir('C:\\') 

dir_src = 'D:\\Users\\Tibi\\Pictures' 
dir_dst = 'D:\\test' 

#while True: 
# try: 
#  for folder in os.walk(dir_src): 
#   print(folder) 
#   for filename in os.listdir(dir_src): 
#    if filename.endswith('.CR2'): 
#     shutil.copy(dir_src + '\\' + filename, dir_dst) 
#    print(filename) 
# except UnicodeEncodeError: 
#  print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>File %s was Skipped!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" %filename) 
import pathlib 
import glob 

dir_src = pathlib.Path('D:\\Users\\Tibi\\Pictures\\Move') 
dir_dst = pathlib.Path('D:\test') 

for file in dir_src.rglob('*.CR2'): 
    shutil.copy(dir_src + '\\' + file, dir_dst) 
    print("Current File is: %s" % file) 

코드 밑에 주석없이 주석 처리 된 코드를 시도했습니다.

+0

당신이 시도한 변형을 보여주십시오. 처음부터 시작한다는 것은 무엇을 의미합니까? 더 많은 정보를 제공해 주시면 더 나은 결과를 얻을 수 있습니다. 디렉토리 구조는 어떻게 생겼습니까? – The4thIceman

답변

1

이것은 당신이 원하는 일을해야하지만, 어떤 파일이 동일한 이름이 없다는 것을 가정 않습니다

import os 
import shutil 

source_dir = r"/Users/ThatOtherBatman/Foo/" 
target_dir = r"/Users/ThatOtherBatman/Bar/" 
extensions = (".mp4", ".cr2") 

for directory, _, file_names in os.walk(source_dir): 
    for file_name in file_names: 
     if file_name.lower().endswith(extensions): 
      source_path = os.path.join(directory, file_name) 
      target_path = os.path.join(target_dir, file_name) 
      print("Moving {} to {}".format(file_name, target_dir)) 
      shutil.copy(source_path, target_dir) 

os.walk 당신이 디렉토리를 통해 재귀 적으로 검색하는 데 사용할 것입니다. 그런 다음 파일 확장명이 원하는 확장명에 있는지 확인하고 파일 확장명이 있으면 해당 파일을 복사하십시오.

+0

소스와 타겟을 변경했는데 작동하지 않았습니다. 잠시 멈추고 출력이 없거나 대상 폴더에 변경 사항이 없으면 종료됩니다. –

+1

정말요? 'print' 문으로 다시 시도 할 수 있습니까? – Batman

+0

루프의 각 부분 (루프의 양쪽과 if 문의 직후)에 3 개의 인쇄 라인 (각각 "Hello", "Hello World", Hello World2 ")을 추가하고, 라인에 print 문을 추가했습니다 . 코드의 출력했다 :..이 괜찮 았는데, 안녕하세요 안녕하세요 세계 안녕하세요 안녕하세요 –

관련 문제