尝试使用shutil.move()将文件移动到子文件夹

时间:2017-10-21 19:49:17

标签: python python-2.7 shutil

我正在尝试创建一个代码,将所有文件放在一个目录中,并将它们组织到子目录中。即2017.2.3,2016.2.5,2015.5.6,2014.3.5到原始目录中标记为2017,2016,2015,2014的文件夹中。使用2.7.13

我正在使用的代码如下:

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)

这是我收到的错误:

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'

非常感谢任何反馈。

1 个答案:

答案 0 :(得分:2)

此处的问题是您尝试通过加入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)