最近使用数据集时遇到一个问题,需要把每个文件夹下第10张图片复制出来放到一个指定的文件夹里,手动复制太麻烦,所以找了点代码自己改了改。
要提取每个子文件夹下名称后缀为_10.jpg的文件到一个新的文件夹中。
import os
import re
import xlwt
# 递归复制文件夹内的文件
def copyFiles(sourceDir, targetDir):
for file in os.listdir(sourceDir):
sourceDir1 = os.path.join(sourceDir, file) # 路径名拼接
targetDir1 = os.path.join(targetDir)
for file in os.listdir(sourceDir1):
sourceDir2 = os.path.join(sourceDir1, file)
# 忽略某些特定的子文件夹
if sourceDir2.find("视点") > 0:
# 列出源目录文件和文件夹
for file in os.listdir(sourceDir2):
# 拼接完整路径
if re.search('_10.jpg', file):
sourceFile = os.path.join(sourceDir2, file)
targetFile = os.path.join(targetDir1, file)
if os.path.isfile(sourceFile):
if not os.path.exists(targetDir1):
os.makedirs(targetDir1)
if not os.path.exists(targetFile) or (os.path.exists(targetFile) and (
os.path.getsize(targetFile) != os.path.getsize(sourceFile))):
open(targetFile, "wb").write(open(sourceFile, "rb").read())
copyFiles("C:\\Users\\yaotong\\Desktop\\OFD_full_DB_labelled\\pic", "copy")
语法:os.listdir(path),path:需要列出的目录路径
用法:
import os, sys
# 打开文件
path = "/pic"
dirs = os.listdir( path )
# 输出所有文件和文件夹
for file in dirs:
print file
语法:os.path.join(path1,path2,path3,…)
用法:
path1 = pic
path2 = 0001
path = os.path.join(path1,path2)
print(path)
结果:pic\0001
语法:string.find(‘str’)返回从string扫描到str的起始位置,未找到返回-1
用法:
string = 'hello,world'
print(string.find('ello'))
结果: (1,4)
语法:re.search(pattern, string)
pattern:要找到的字符串
string:要扫描的字符串
用法:
import re
if re.rearch('he','helloworld')
print(true)
结果:true
os.path.isfile()判断该路径是否是文件
os.path.exists()判断是否存在,存在返回True,否则False
os.makedirs()创建路径
copyFiles共有两个参数:
sourceDir:需要遍历的文件夹路径
targetDir:遍历后保存查找到文件的路径
新建文本文档,命名为test.py,粘贴代码。shift加鼠标右键→在此处打开命令窗口,输入python test.py回车。
好了