Python实现文件名匹配与指定目录文件复制
本文介绍如何使用Python实现文件名匹配与文件复制功能。通过遍历源目录获取文件名,利用os.path模块拆分并拼接目标路径,最终使用shutil.copy将匹配的文件复制到指定目录。
Python文件名匹配与文件复制实现
文件匹配的核心逻辑是提取源文件的文件名(不含后缀),随后在目标文件夹中查找同名文件,并将其移动至指定目录。具体流程分为三步:首先遍历源目录A获取所有文件名;其次将提取的文件名与目标路径B拼接,并添加对应后缀生成目标文件名;最后根据生成的目标文件名,将文件复制到指定目录C。
接下来开始编写相关代码。
获取指定目录文件名
第一步:获取指定目录A下的所有文件名,并去除文件后缀。主要实现思路如下:
def GetFileNameAndExt(filename):
import os
(filepath,tempfilename) = os.path.split(filename);
(shotname,extension) = os.path.splitext(tempfilename);
return shotname,extension
测试代码示例
print(GetFileNameAndExt('c:\jb51\index.html'))
返回结果:
('index', '.html')
实际代码如下
#coding=utf-8
import os
import os.path
def GetFileNameAndExt(filename):
(filepath,tempfilename) = os.path.split(filename);
(shotname,extension) = os.path.splitext(tempfilename);
return shotname,extension
source_dir='/home/nvidia/xmlReader/circle'
label_dir='/home/nvidia/xmlReader/label'
annotion_dir='/home/nvidia/xmlReader/annocation'
##1.将指定A目录下的文件名取出,并将文件名文本和文件后缀拆分出来
img=os.listdir(source_dir) #得到文件夹下所有文件名称
s=[]
for fileNum in img: #遍历文件夹
if not os.path.isdir(fileNum): #判断是否是文件夹,不是文件夹才打开
print fileNum #打印出文件名
imgname= os.path.join(source_dir,fileNum)
print imgname #打印出文件路径
(imgpath,tempimgname) = os.path.split(imgname); #将路径与文件名分开
(shotname,extension) = os.path.splitext(tempimgname); #将文件名文本与文件后缀分开
print shotname,extension
print '~~~~'
拼接目标文件名
第二步:利用提取的文件名,与指定路径B拼接,并添加后缀,生成目标文件名。
##2.将取出来的文件名文本与特定后缀拼接,在于路径拼接,得到B目录下的文件
xmlname=os.path.join(label_dir,shotname,'.xml')
print xmlname
但直接输出的结果包含分隔符。

如何去除分隔符?或者说如何正确拼接文件名文本和后缀?基于以下Python基础知识:
'%d.txt'%fname
这样可以生成类似120.txt这样的字符串格式。
代码如下:
##2.将取出来的文件名文本与特定后缀拼接,在于路径拼接,得到B目录下的文件
tempxmlname='%s.xml'%shotname
xmlname=os.path.join(label_dir,tempxmlname)
print xmlname
我们来看看输出结果:

至此,我们得到了期望的数据格式,接下来开始在指定路径中查找匹配的文件。
复制文件到指定目录
第三步:定位到目标文件名,将其复制到指定目录下,并保持文件名不变(Python文件复制)。
##3.根据得到的xml文件名,将对应文件拷贝到指定目录C
shutil.copy(xmlname,annotion_dir)
这样,与图片相关的标注文件就全部拷贝过来了。

最后,我们来看看最终的完整代码:
#coding=utf-8
import os
import os.path
import shutil #Python文件复制相应模块
def GetFileNameAndExt(filename):
(filepath,tempfilename) = os.path.split(filename);
(shotname,extension) = os.path.splitext(tempfilename);
return shotname,extension
source_dir='/home/nvidia/xmlReader/circle'
label_dir='/home/nvidia/xmlReader/label'
annotion_dir='/home/nvidia/xmlReader/annocation'
##1.将指定A目录下的文件名取出,并将文件名文本和文件后缀拆分出来
img=os.listdir(source_dir) #得到文件夹下所有文件名称
s=[]
for fileNum in img: #遍历文件夹
if not os.path.isdir(fileNum): #判断是否是文件夹,不是文件夹才打开
print fileNum #打印出文件名
imgname= os.path.join(source_dir,fileNum)
print imgname #打印出文件路径
(imgpath,tempimgname) = os.path.split(imgname); #将路径与文件名分开
(shotname,extension) = os.path.splitext(tempimgname); #将文件名文本与文件后缀分开
print shotname,extension
print '~~~~'
##2.将取出来的文件名文本与特定后缀拼接,再与路径B拼接,得到B目录下的文件
tempxmlname='%s.xml'%shotname
xmlname=os.path.join(label_dir,tempxmlname)
print xmlname
##3.根据得到的xml文件名,将对应文件拷贝到指定目录C
shutil.copy(xmlname,annotion_dir)
至此,大功告成!

以上这篇Python文件名匹配与文件复制的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













