从大量文件中提取或者转移一定数量的文件到指定路径,有以下三种方法实现:
1. 从A文件夹(fileDir)中随机提取一定比例/一定数量的文件复制到B文件夹(trainDir)下(目的是随机抽取一定数量样本):
# # -*- coding:utf-8 -*-
# """
# 作者:CloudSharing
# 邮箱:[email protected]
# 日期:2022年07月20日11:53
# """
import os
import random
import shutil
import time
start = time.time()
def CaptureRandomFile(fileDir, trainDir):
pathDir = os.listdir(fileDir) # 取文件的原始路径
filenumber = len(pathDir)
rate1 = 0.1 # 自定义抽取文件比例,比方说100个文件中随机抽10个,那就是0.1
if 100 < filenumber <= 1000:
rate1 = 0.10
elif 1000 < filenumber:
rate1 = 0.05
else:
rate1 = 1
print(rate1)
picknumber1 = int(filenumber * rate1) # 按照rate比例从文件夹中取一定数量的文件
sample1 = random.sample(pathDir, picknumber1) # 随机选取picknumber数量的样本
for name in sample1:
shutil.copyfile(fileDir + '/' + name, trainDir + "\\" + name)
# selectFile(fileDir, trainDir)
if __name__ == '__main__':
fileDir = r'F:\X6_GMC'
trainDir = r'F:\X6_GMC\1_SPS'
CaptureRandomFile(fileDir, trainDir)
print("使用该脚本用时是{}s".format(time.time() - start))
2. 实现从A文件夹(fileDir)向B文件夹(targetDir)转移与B文件夹中相同的文件(目的是替换B文件夹中部分错误文件,特别针对大数量文件出现错误的情况):
# # -*- coding:utf-8 -*-
# """
# 作者:CloudSharing
# 邮箱:[email protected]
# 日期:2022年07月26日12:33
# """
import os
import random
import shutil
import time
start = time.time()
def CaptureRepeatFile(fileDir, targetDir):
pathDir = os.listdir(fileDir) # 取文件的原始路径
path_targetDir = os.listdir(targetDir)
for file_name in pathDir:
if file_name in path_targetDir:
shutil.copyfile(fileDir + '/' + file_name, targetDir + "\\" + file_name)
else:
pass
# selectFile(fileDir, trainDir)
if __name__ == '__main__':
fileDir = r'F:\X6_GMC'
targetDir = r'F:\X6_GMC\1_SPS'
CaptureRepeatFile(fileDir, targetDir)
print("使用该脚本用时是{}s".format(time.time() - start))
3. 实现从A文件夹(fileDir)向C文件夹(targetDir)转移与B文件夹(captureDir)同名的文件(目的是从A文件夹提取与B文件夹下相同名字的文件放在另外文件夹下):
# # -*- coding:utf-8 -*-
# """
# 作者:CloudSharing
# 邮箱:[email protected]
# 日期:2022年07月26日15:33
# """
import os
import random
import shutil
import time
start = time.time()
def CaptureRepeatFile(fileDir, targetDir, captureDir):
pathDir = os.listdir(fileDir)
path_targetDir = os.listdir(targetDir)
path_captureDir = os.listdir(captureDir)
for file_name in pathDir:
if file_name in path_captureDir:
shutil.copyfile(fileDir + '/' + file_name, targetDir + "\\" + file_name)
else:
pass
# selectFile(fileDir, trainDir)
if __name__ == '__main__':
fileDir = r'F:\X6_GMC'
targetDir = r'F:\X6_GMC\1_SPS'
captureDir = r'F:\X6_GMC\AI'
CaptureRepeatFile(fileDir, targetDir, captureDir)
print("使用该脚本用时是{}s".format(time.time() - start))
4. 实现从A文件夹(fileDir)向C文件夹(targetDir)转移与B文件夹(captureDir)不同名的文件(目的是从A文件夹提取与B文件夹下不相同名字的文件放在另外文件夹下):
# # -*- coding:utf-8 -*-
# """
# 作者:CloudSharing
# 邮箱:邮箱:[email protected]
# 日期:2022年07月26日15:33
# """
import os
import random
import shutil
import time
start = time.time()
def CaptureRepeatFile(fileDir, targetDir, captureDir):
pathDir = os.listdir(fileDir)
path_targetDir = os.listdir(targetDir)
path_captureDir = os.listdir(captureDir)
for file_name in pathDir:
if file_name not in path_captureDir:
shutil.copyfile(fileDir + '/' + file_name, targetDir + "\\" + file_name)
else:
pass
# selectFile(fileDir, trainDir)
if __name__ == '__main__':
fileDir = r'E:\1_SPS\25_C82-AI\2_coord\trainDir\3_train2nd_initialStr'
targetDir = r'E:\1_SPS\25_C82-AI\2_coord\trainDir\4_dft_nag2\transferfile'
captureDir = r'E:\1_SPS\25_C82-AI\2_coord\trainDir\4_dft_nag2'
CaptureRepeatFile(fileDir, targetDir, captureDir)
print("使用该脚本用时是{}s".format(time.time() - start))