2017-10-21 15 views
1

私は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

関連する問題