Python递归查找文件并移动到一个目标目录
该脚本应递归地遍历 rootpath 目录并查找所有具有 *.mp4 扩展名的文件。打印具有目录结构的文件列表。然后将文件移动到 destDir 目录。我遇到的问题是尝试将文件移动到新目录时。只有 rootPath 目录中的文件才会移动到新目标。 rootPath下子目录中的文件导致错误:
/Volumes/VoigtKampff/Temp/TEST/level01_test.mp4
/Volumes/VoigtKampff/Temp/TEST/Destination/2levelstest02.mp4
Traceback (most recent call last):
File "/Volumes/HomeFolders/idmo04/Desktop/ScriptsLibrary/Python/recursive_find.py", line 14, in <module>
shutil.move(root+filename, destDir+'/'+filename)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 281, in move
copy2(src, real_dst)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 110, in copy2
copyfile(src, dst)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 65, in copyfile
with open(src, 'rb') as fsrc:
IOError: [Errno 2] No such file or directory: '/Volumes/VoigtKampff/Temp/TEST/Destination2levelstest02.mp4'
############## here is the scriptimport fnmatch
import os
import shutil
rootPath = '/Volumes/VoigtKampff/Temp/TEST/'
destDir = '/Volumes/VoigtKampff/Temp/TEST2/'
matches = []
for root, dirnames, filenames in os.walk(rootPath):
for filename in fnmatch.filter(filenames, '*.mp4'):
matches.append(os.path.join(root, filename))
print(os.path.join(root, filename))
shutil.move(root+filename, destDir+'/'+filename)
The script should recursively go through the rootpath directory and find all files with *.mp4 extension. Print the list of files with the directory structure. Then move the files to the destDir directory. The problem I run into is when trying to move the files to the new directory. Only files in the rootPath directory will be moved to the new destination. Files in subdirectories under rootPath causes errors:
/Volumes/VoigtKampff/Temp/TEST/level01_test.mp4
/Volumes/VoigtKampff/Temp/TEST/Destination/2levelstest02.mp4
Traceback (most recent call last):
File "/Volumes/HomeFolders/idmo04/Desktop/ScriptsLibrary/Python/recursive_find.py", line 14, in <module>
shutil.move(root+filename, destDir+'/'+filename)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 281, in move
copy2(src, real_dst)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 110, in copy2
copyfile(src, dst)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 65, in copyfile
with open(src, 'rb') as fsrc:
IOError: [Errno 2] No such file or directory: '/Volumes/VoigtKampff/Temp/TEST/Destination2levelstest02.mp4'
############## here is the script
import fnmatch
import os
import shutil
rootPath = '/Volumes/VoigtKampff/Temp/TEST/'
destDir = '/Volumes/VoigtKampff/Temp/TEST2/'
matches = []
for root, dirnames, filenames in os.walk(rootPath):
for filename in fnmatch.filter(filenames, '*.mp4'):
matches.append(os.path.join(root, filename))
print(os.path.join(root, filename))
shutil.move(root+filename, destDir+'/'+filename)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
恭喜!您已经找到了
os.path.join()
。您甚至可以在print
调用中使用它。因此,您只需将其与move()
一起使用即可:(但请注意不要覆盖
destDir
中的任何内容。)Congratulations! You have already found
os.path.join()
. You even use it, on yourprint
call. So you only have to use it withmove()
:(But take care not to overwrite anything in
destDir
.)将最后一行中的
root + filename
更改为os.path.join(root, filename)
(如前面两行所示)?Change the
root + filename
in the last line toos.path.join(root, filename)
(as seen two lines earlier)?