如何解决如何在所有子目录中查找文件并将其复制?
运行后,我需要一个像这样的批处理程序:
- 我在批处理窗口中输入了一个数字
- 它将寻找一个名为input的文件,但在
C:/Print/
中具有.tif扩展名 - 如果文件不在
C:/Print/
中,则它应该在所有子目录中寻找该文件,例如C:/Print/64326/BCB/1234.tif
- 找到文件后,应将其复制到
D:/HotFolder/
我设法创建了这样的东西,但是首先它不能正常工作,第二件事是它不是通用的。
import os,glob,time,shutil
os.chdir("C:/Print")
print("Scan the barcode.")
while True:
barcode = input(">").upper()
tif = f"{barcode}.tif"
if os.path.isfile(tif):
shutil.copy(tif,"D:/HotFolder//")
print(f"File copied succesfully. {tif}")
os.chdir("C:/Print/")
elif not os.path.isfile(barcode):
os.chdir(f"C:/Print/{barcode}")
if os.path.isfile(tif):
shutil.copy(tif,"D:/HotFolder/")
print(f"File copied succesfully. {tif}")
os.chdir("C:/Print/")
elif not os.path.isfile(tif):
os.chdir(f"C:/Print/{barcode}/FCB")
if os.path.isfile(barcode):
shutil.copy(tif,"D:/HotFolder/")
print(f"File copied succesfully. {tif}")
os.chdir("C:/Print/")
elif not os.path.isfile(tif):
os.chdir(f"C:/Print/{barcode}/FCS")
if os.path.isfile(barcode):
shutil.copy(tif,"D:/HotFolder/")
print(f"File copied succesfully. {tif}")
os.chdir("C:/Print/")
elif not os.path.isfile(tif):
os.chdir(f"C:/Print/{barcode}/BCB")
if os.path.isfile(barcode):
shutil.copy(tif,"D:/HotFolder/")
print(f"File copied succesfully. {tif}")
os.chdir("C:/Print/")
elif not os.path.isfile(tif):
os.chdir(f"C:/Print/{barcode}/BCS")
if os.path.isfile(barcode):
shutil.copy(tif,"D:/HotFolder/")
print(f"File copied succesfully. {tif}")
os.chdir("C:/Print/")
else:
print("Error.")
解决方法
这是一个小片段:
from pathlib import Path
from shutil import copyfile
input_dir = "C:/Print/"
output_dir = "D:/HotFolder/"
barcode = "1234"
for filename in Path(input_dir).rglob("*.tif"):
if filename.name == barcode + ".tif":
copyfile(filename,Path(output_dir,filename.name))
break
else:
print("Not found")
,
这是我的原始答案的完整修订版,它基于使用os.walk()
函数。现在,它使用Path
模块中的pathlib
子类-使其几乎与@Andrei's answer相同。
原则上的区别在于,我已在注释中并入了您要求的其他功能。
from pathlib import Path
import shutil
root_dir = Path('C:/Print')
target_dir = Path('D:/HotFolder')
ext = '.tif'
while True:
target_filename = (input("Barcode? ") + ext).casefold()
for filename in root_dir.rglob('*' + ext):
if filename.name.casefold() == target_filename:
shutil.copy2(filename,target_dir)
print(f'{filename.name} copied from {filename.parent} to {target_dir}')
break # Target found and copied.
else:
print(f'{target_filename} not found in {root_dir} directory')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。