问题描述
我正在尝试将所有子目录中名为“mypicture.jpg”的所有文件复制并重命名为“picture.jpg”。如果我这样做:
import glob
source = glob.glob('**/mypicture.jpg',recursive=True)
print(source)
它显示了我所有的mypicture.jpg,但是是否可以根据列表复制和重命名每个目录中的.jpg?
在 shell 中我只做:
find ./ -name 'mypicture.jpg' -execdir cp -prv '{}' './picture.jpg' ';'
它做我想做的事。
只是为了复制和重命名我可以使用 shutil.copyfile(source,destination)
但只是文件的路径,所以我的问题是:
如何将文件路径从我的列表传递到我的 source=
并循环/迭代它然后对列表中的所有文件?这甚至可能吗?还是我必须使用其他功能?
好的,使用路径库:
from pathlib import Path
import shutil
dirpath=Path(r'W:/directory')
files=dirpath.rglob("mypicture.jpg")
for path in files:
print(path)
shutil.copy(path,path.parent / 'picture.jpg',follow_symlinks=True)
它有效,我有什么需要注意的吗?
解决方法
#import modules
from pathlib import Path
import shutil
#define directory
dirpath=Path('W:/directory')
#search for files path with given name in dir and subdir using rglob
files=dirpath.rglob("mypicture.jpg")
#copy file in same directory with new name to rename
for path in files:
print(path)
shutil.copy(path,path.parent / 'picture.jpg',follow_symlinks=True)