Python文件名匹配,文件复制

 文件名的匹配,实际上就是相当于获取文件名(不含后缀),然后利用获取到的文件名到另外一个文件夹中去寻找对应的文件,然后将文件取出,放置到指定文件夹下.概括的来说,分三个步骤:一是取出遍历目录A,得到各个文件文件名;二是利用该文件名,与指定路径B拼接,并加上后缀,产生目标文件名;三是根据拼接产生的目标文件名,将相应文件复制到指定目录C.

 好,那么我们开始写代码吧~~~

step1:获取指定目录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 '~~~~'
step2:二是利用该文件名,与指定路径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
我们来看看输出:

大功告成,现在我们得到了想要的数据格式,开始到这个指定的路径去寻找文件匹配文件名了~~~~

step3:定位到目标文件名,将其复制到指定目录下,保持文件名不变.(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)
	
	

至此,大功告成


  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Python的os模块和shutil模块来实现此操作。以下是实现步骤: 1. 首先,使用os模块列出目标文件夹的所有文件和子文件夹。可以使用os.walk()函数,该函数返回一个三元组,包括当前目录的路径、当前目录下的所有子目录列表和当前目录下的所有文件列表。 2. 对于每个文件,提取文件名并与目标文件名进行比较。可以使用os.path.splitext()函数来提取文件名文件扩展名,使用os.path.basename()函数来提取文件名。 3. 如果文件名匹配,则使用shutil模块中的shutil.copy()函数将目标文件复制到当前文件夹中。 4. 如果需要替换文件,可以使用os.remove()函数删除原始文件,然后使用shutil.move()函数将新文件移动到原始文件的位置。 以下是一个示例代码,可以根据需要进行修改: ```python import os import shutil # 定义目标文件夹和目标文件名 target_folder = 'path/to/folder' target_file_name = 'filename.ext' # 遍历目标文件夹中的所有文件和子文件夹 for root, dirs, files in os.walk(target_folder): for file in files: # 提取文件名和扩展名 filename, ext = os.path.splitext(file) # 如果文件名匹配,则复制或替换文件 if filename == target_file_name: # 构建目标文件路径 target_file_path = os.path.join(root, file) # 复制或替换文件 # shutil.copy(target_file_path, 'path/to/destination') # 替换文件 os.remove(target_file_path) shutil.move('path/to/newfile', target_file_path) ``` 请注意,这段代码仅演示了如何根据文件名在一堆文件夹中找到同名的文件并替换,实际情况可能更加复杂,需要根据具体情况进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值