2017-10-21 20 views
1

모든 파일을 하나의 디렉토리에 저장하고 하위 디렉토리로 구성하는 코드를 만들려고합니다. 즉 2017.2.3, 2016.2.5, 2015.5.6, 2014.3.5를 원래 디렉토리의 2017, 2016, 2015, 2014 폴더로 분류하십시오. 2.7.13shutil.move()를 사용하여 하위 폴더로 파일을 이동하는 중

내가 사용하는 코드를 사용하는 것은 다음과 같습니다 : 모든 의견은 크게 감상 할 수

Traceback (most recent call last): 
    File "D:\Documents\Programs\Sigma_File_Move.py", line 24, in <module> 
    shutil.move(os.path.join(source, files), dest1) 
    File "D:\Python27\ArcGIS10.4\lib\ntpath.py", line 65, in join 
    result_drive, result_path = splitdrive(path) 
    File "D:\Python27\ArcGIS10.4\lib\ntpath.py", line 116, in splitdrive 
    normp = p.replace(altsep, sep) 
AttributeError: 'list' object has no attribute 'replace' 

:

import os, shutil 

root_path = ('D:\Sigma\Rides') 
folders = ['2016', '2017', '2018', '2019', '2020'] 
for folder in folders: 
    os.mkdir(os.path.join(root_path,folder)) 

source = os.listdir('D:\\Sigma\\Rides') 
dest1 = ('D:\\Sigma\\Rides\\2016') 
dest2 = ('D:\\Sigma\\Rides\\2017') 
dest3 = ('D:\\Sigma\\Rides\\2018') 
dest4 = ('D:\\Sigma\\Rides\\2019') 
dest5 = ('D:\\Sigma\\Rides\\2020') 


for files in source: 
    if (files.startswith('2016_')): 
     shutil.move(os.path.join(source, files), dest1) 
    if (files.startswith('2017')):   
     shutil.move(os.path.join(source, files), dest2) 
    if (files.startswith('2018')): 
     shutil.move(os.path.join(source, files), dest3) 
    if (files.startswith('2019')): 
     shutil.move(os.path.join(source, files), dest4) 
    if (files.startswith('2020')): 
     shutil.move(os.path.join(source, files), dest5) 

이 내가 receieve 오류입니다.

답변

1

여기서 문제는 source 변수와 files을 결합하여 소스 파일 경로를 만들려고한다는 것입니다. 여기 source은 "Rides"디렉토리의 모든 파일 및 폴더 목록입니다. 파일 및 폴더 목록을 폴더 이름에 조인 할 수 없습니다. 그래서 오류가 발생합니다.

os.path.join(source, files)os.path.join(root_path, files)으로 바꾸면됩니다.

if (files.startswith('2016_')): 
    shutil.move(os.path.join(source, files), dest1) 

실수가 발생했습니다

if (files.startswith('2016_')): 
    shutil.move(os.path.join(root_path, files), dest1) 
+0

로 변경해야합니다. 실제로 여기서'abspath'를 사용하여 경로를 생성 할 수 없습니다. 코드에서'root_path' 변수를 사용하도록 변경했습니다. – anupsabraham