簡體   English   中英

嘗試使用shutil.move()將文件移動到子文件夾中

[英]Trying to move files into subfolders with shutil.move()

我正在嘗試編寫一個將所有文件放在一個目錄中並將它們組織到子目錄中的代碼。 即將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'

任何反饋將不勝感激。

這里的問題是,您正在嘗試通過將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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM