如何从多个目录复制特定文件并使用索引重命名 python
How to copy a particular file from multiple directories and rename with indexes using python
我想将特定文件从不同的目录复制到另一个目录。每个目录都有几个具有相同扩展名的文件。我想将一个特定文件从每个目录复制到另一个文件夹,并使用索引重命名该文件。
这是我当前的根目录树的示例。
root--Dir1--subDir1--subDir2
| |--x.bmp
| |--y.bmp
| |-t.txt
Dir2--subDir1--subDir2
| |--x.bmp
| |--y.bmp
| |-t.txt
Dir3--subDir1--subDir2
| |--x.bmp
| |--y.bmp
| |-t.txt
我只想复制x.bmp文件到其他目录。
我想要的目录将像下面给出的示例树一样。
NEWDIR
|--x1.bmp
|--x2.bmp
|--x3.bmp
.
.
我在其他帖子的帮助下写了一个示例代码块,但它给了我错误。
在这里我发布了代码片段和错误。
import os
import shutil
import glob
root_dir = 'oldDir'
dest_dir = 'NewDir'
os.listdir(root_dir)
for folder in os.listdir(root_dir):
folder_path = os.path.join(root_dir, folder)
if os.path.isdir(folder_path):
for subfolder in os.listdir(folder_path):
subfolder_path = os.path.join(root_dir, folder, subfolder)
for subfolder2 in os.listdir(subfolder_path):
subfolder2_path = os.path.join(root_dir, folder, subfolder,subfolder2)
for filename in os.listdir(subfolder2_path):
if filename == 'X.bmp':
file_path = os.path.join(root_dir, folder, subfolder, subfolder2,filename)
for i in filename:
filename = 'X.bmp'%(i,)
dest_path = os.path.join(dest_dir, filename)
shutil.copy(file_path, dest_path)
print("Copied ", file_path, "to", dest_path)
我收到的错误信息
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_6448/526909518.py in <module>
22 #filename+=1
23 for i in filename:
---> 24 filename = 'X.bmp'%(i,)
25 dest_path = os.path.join(dest_dir, filename)
26 shutil.copy(file_path, dest_path)
TypeError: not all arguments converted during string formatting
我在 Whosebug 中遇到了类似的问题,但答案对我没有帮助。我感谢这方面的帮助。
您可以使用 glob
来查找您需要的文件。示例如下
import glob, pathlib, shutil
root_dir = r"C:/drive/samples"
target_dir = pathlib.Path(r"C:/drive/samples/D2")
copy_files = list(glob.glob(f"{root_dir}/**/*.bmp",recursive=True))
index =1
for file in copy_files:
file = pathlib.Path(file)
target_file = target_dir / f"{file.stem}{index}{file.suffix}"
shutil.copyfile(file, target_file)
index+=1
可能对此有更多改进。但这是最简单的方法之一,
我想将特定文件从不同的目录复制到另一个目录。每个目录都有几个具有相同扩展名的文件。我想将一个特定文件从每个目录复制到另一个文件夹,并使用索引重命名该文件。 这是我当前的根目录树的示例。
root--Dir1--subDir1--subDir2
| |--x.bmp
| |--y.bmp
| |-t.txt
Dir2--subDir1--subDir2
| |--x.bmp
| |--y.bmp
| |-t.txt
Dir3--subDir1--subDir2
| |--x.bmp
| |--y.bmp
| |-t.txt
我只想复制x.bmp文件到其他目录。 我想要的目录将像下面给出的示例树一样。
NEWDIR
|--x1.bmp
|--x2.bmp
|--x3.bmp
.
.
我在其他帖子的帮助下写了一个示例代码块,但它给了我错误。 在这里我发布了代码片段和错误。
import os
import shutil
import glob
root_dir = 'oldDir'
dest_dir = 'NewDir'
os.listdir(root_dir)
for folder in os.listdir(root_dir):
folder_path = os.path.join(root_dir, folder)
if os.path.isdir(folder_path):
for subfolder in os.listdir(folder_path):
subfolder_path = os.path.join(root_dir, folder, subfolder)
for subfolder2 in os.listdir(subfolder_path):
subfolder2_path = os.path.join(root_dir, folder, subfolder,subfolder2)
for filename in os.listdir(subfolder2_path):
if filename == 'X.bmp':
file_path = os.path.join(root_dir, folder, subfolder, subfolder2,filename)
for i in filename:
filename = 'X.bmp'%(i,)
dest_path = os.path.join(dest_dir, filename)
shutil.copy(file_path, dest_path)
print("Copied ", file_path, "to", dest_path)
我收到的错误信息
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_6448/526909518.py in <module>
22 #filename+=1
23 for i in filename:
---> 24 filename = 'X.bmp'%(i,)
25 dest_path = os.path.join(dest_dir, filename)
26 shutil.copy(file_path, dest_path)
TypeError: not all arguments converted during string formatting
我在 Whosebug 中遇到了类似的问题,但答案对我没有帮助。我感谢这方面的帮助。
您可以使用 glob
来查找您需要的文件。示例如下
import glob, pathlib, shutil
root_dir = r"C:/drive/samples"
target_dir = pathlib.Path(r"C:/drive/samples/D2")
copy_files = list(glob.glob(f"{root_dir}/**/*.bmp",recursive=True))
index =1
for file in copy_files:
file = pathlib.Path(file)
target_file = target_dir / f"{file.stem}{index}{file.suffix}"
shutil.copyfile(file, target_file)
index+=1
可能对此有更多改进。但这是最简单的方法之一,