我正在尝试编写一个脚本,根据文件扩展名将文件从下载文件夹移动到相应的文件夹。下载文件夹中的很多文件都包含在子目录中,所以我使用的是os.walk。这是我到目前为止得到的信息,但我收到了一些错误消息。到目前为止,我只为一种文件类型编写了代码,只是为了看看它是否有效。当我的代码有效时,我将为最常见的文件类型编写代码。顺便说一句,我在linux上
import os
import shutil
dest_dir = "/home/kevin/Videos"
dest_dir2 = "/home/kevin/Music"
dest_dir3 = "/home/kevin/Documents"
dest_dir4 = "/home/kevin/Pictures"
for root, dirs, files in os.walk("/home/kevin/Downloads"):
for file in files:
if(file.endswith(".mp4")):
print(os.path.join(root,file))
shutil.move(file, dest_dir)
这是erorrs
/home/kevin/Downloads/Mad Max Beyond Thunderdome 1985 1080p BDRip H264 AAC - KiNGDOM/Mad Max Beyond Thunderdome.mp4
Traceback (most recent call last):
File "/usr/lib/python3.8/shutil.py", line 788, in move
os.rename(src, real_dst)
FileNotFoundError: [Errno 2] No such file or directory: 'Mad Max Beyond Thunderdome.mp4' -> '/home/kevin/Videos/Mad Max Beyond Thunderdome.mp4'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/kevin/Documents/move.py", line 13, in <module>
shutil.move(file, dest_dir)
File "/usr/lib/python3.8/shutil.py", line 802, in move
copy_function(src, real_dst)
File "/usr/lib/python3.8/shutil.py", line 432, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.8/shutil.py", line 261, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: 'Mad Max Beyond Thunderdome.mp4'
[Finished in 0.0s with exit code 1]
[shell_cmd: python -u "/home/kevin/Documents/move.py"]
[dir: /home/kevin/Documents]
[path: /home/kevin/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin]
知道我做错了什么吗?如果我能做到这一点,我还想知道是否有办法将包含文件的文件夹移动到目标目录,而不仅仅是文件本身?谢谢
编辑:这一部分似乎很有趣,因为它就在那个目录中不存在,但当实际目录是/home/kevin/Videos/Mad Max Beyond Thunderdome.mp4时,为什么它要在Thunderdome.mp4之外寻找/home/kevin/Videos/Mad Max Beyond Thunderdome 1985 1080p BDRIP H264 AAC-KiNGDOM
FileNotFoundError: [Errno 2] No such file or directory: 'Mad Max Beyond Thunderdome.mp4' -> '/home/kevin/Videos/Mad Max Beyond Thunderdome.mp4'
编辑2:这是我之前编写的代码的一部分,用于将文件从下载移动到文档(pdf、doc等),该代码可以工作,但不适用于包含在子文件夹中的文件。是否有任何方法可以修改此代码以包含子文件夹?i、 e使用os.walk
#moves files from downloads to documents
for file in glob.glob(r'/home/kevin/Downloads/*.txt'):
print(file)
shutil.move(file, dest_dir)
for file in glob.glob(r'/home/kevin/Downloads/*.doc'):
print(file)
shutil.move(file, dest_dir)
for file in glob.glob(r'/home/kevin/Downloads/*.docx'):
print(file)
shutil.move(file, dest_dir)
for file in glob.glob(r'/home/kevin/Downloads/*.epub'):
print(file)
shutil.move(file, dest_dir)
for file in glob.glob(r'/home/kevin/Downloads/*.pdf'):
print(file)
shutil.move(file, dest_dir)
for file in glob.glob(r'/home/kevin/Downloads/*.djvu'):
print(file)
shutil.move(file, dest_dir)
编辑3:我想我找到了一个混乱的解决方案。显然glob有一个递归函数,所以我把代码改成这样
for file in glob.glob('/home/kevin/Downloads/**/*.txt', recursive=True):
它抛出了一些错误消息,但实际上它现在正在工作
尝试提及绝对路径(C:\或D:\或E:\)
这可能会奏效:
你会注意到我不是在移动文件,而是在复制它们。因此,一旦您确认一切正常,您就可以从“下载”目录中删除这些文件
相关问题 更多 >
编程相关推荐