尝试使用 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)
我正在尝试制作一个代码,将所有文件放在一个目录中并将它们组织到子目录中。即 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)