2017-10-25 9 views
1

텍스트 파일에서 디렉토리 목록을 읽고이를 사용하여 디렉토리를 새 위치에 복사하려고합니다. 아래의 코드는 목록의 마지막 항목에 대해 "#Perform 복사 또는 파일 이동"루프 만 완료하는 것으로 보입니다. 누군가는 왜 방향으로 나를 가리켜 주실 수 있습니까? readlines()에 의해 반환목록의 마지막 항목에 대해서만 실행되는 중첩 for 루프

import os 
import shutil 

operation = 'copy' # 'copy' or 'move' 

text_file = open('C:\User\Desktop\CopyTrial.txt', "r") 
lines = text_file.readlines() 

for line in lines: 
    new_file_name = line[47:] 
    root_src_dir = os.path.join('.',line) 
    root_target_dir = os.path.join('.','C:\User\Desktop' + new_file_name) 

    # Perform copy or move files. 
    for src_dir, dirs, files in os.walk(root_src_dir): 
     dst_dir = src_dir.replace(root_src_dir, root_target_dir) 

     if not os.path.exists(dst_dir): 
      os.mkdir(dst_dir) 

     for file_ in files: 
      src_file = os.path.join(src_dir, file_) 
      dst_file = os.path.join(dst_dir, file_) 
      if os.path.exists(dst_file): 
       os.remove(dst_file) 
      if operation is 'copy': 
       shutil.copy(src_file, dst_dir) 
      elif operation is 'move': 
       shutil.move(src_file, dst_dir) 

text_file.close() 
+0

'lines'의 마지막'line'을 의미합니까? – Barmar

+0

'root_src_dir'을 출력하고 복사 할 파일이 있는지 확인하십시오. – Barmar

+1

명령 프롬프트에서 재귀 적 디렉토리 복사 만 할 수있는 이유는 무엇입니까? – Barmar

답변

1

선은 후행 줄 바꿈을 포함,하지만 당신은 그것에서 파일 이름을 만들 때이 제거 아닙니다. 마지막 행에서 작동하는 이유는 파일이 개행 문자로 끝나지 않기 때문입니다.

rstrip()을 사용하여 후행 공백을 제거하십시오.

for line in lines: 
    line = line.rstrip() 
    ... 
+0

감사합니다 @ 바르 마 !! – Will