提问人:fbn001 提问时间:8/22/2022 最后编辑:fbn001 更新时间:8/22/2022 访问量:91
尝试将文件从许多不同的子文件夹移动到主子文件夹
trying to move files from many different subfolders to a main subfolder
问:
我正在开发一个程序来组织下载文件夹中的所有文件。为此,我尝试将下载文件夹中每个子目录中的每个文件移动到名为“所有文件”的新文件夹中。我不明白的是,我可以访问子文件夹中的文件(例如打印它们),但我无法移动它们。相反,我收到以下错误:
Traceback (most recent call last):
File "C:\Users\My Username\Desktop\Desktop\Python\testing\147_file_organizer.py", line 33, in <module>
shutil.move(subfolder_path, dst_path)
File "D:\anaconda3\lib\shutil.py", line 801, in move
if _samefile(src, dst):
File "D:\anaconda3\lib\shutil.py", line 220, in _samefile
return os.path.samefile(src, dst)
File "D:\anaconda3\lib\genericpath.py", line 100, in samefile
s1 = os.stat(f1)
TypeError: stat: path should be string, bytes, os.PathLike or integer, not list
代码如下:
import os
import shutil
path = ('C:/Users/My Username/Downloads/')
obj = os.scandir(path)
for entry in obj:
dst_path = r'C:/Users/My Username/Downloads/all files/'
if entry.is_dir():
subfolder_path = os.listdir(path + entry.name)
for subfolder_file in subfolder_path:
shutil.move(subfolder_path, dst_path)
obj.close()
非常感谢您的提示、帮助和建议!
答:
1赞
lemonhead
8/22/2022
#1
我认为这是由一个简单的错别字引起的。您正在尝试执行 shutil.move
on - 条目路径下所有文件/目录的列表,而不是 - 您在 for 循环中迭代的列表中的文件/目录。subfolder_path
subfolder_file
但是,此外,您可能希望指定一个完整路径,而不仅仅是要移动的文件/目录的基本名称,这是 os.listdir
返回的内容
相反,您需要:
for entry in obj:
dst_path = r'C:/Users/My Username/Downloads/all files/'
if entry.is_dir():
subfolder_path = os.listdir(path + entry.name)
for subfolder_file in subfolder_path:
shutil.move(os.path.join(entry.path, subfolder_file), dst_path)
评论
0赞
fbn001
8/23/2022
谢谢。有些东西奏效了!我仍然需要围绕解决方案进行思考,因为发生了一些事情,程序将文件从许多文件夹(但不是所有文件夹)移动到其目的地。
评论
entry.is_dir()