将数据拆分为测试和训练,包括
Splitting data into test and train including
如何根据数据帧变量将包含多个视频文件的文件夹拆分为训练文件夹和测试文件夹,这些变量告诉我哪个视频应该在训练文件夹中,哪个视频应该在测试文件夹中? (在 Python 3.0 中)。其中多个视频位于单独的类别文件夹中
每个视频都可以在例如以下类别目录中找到:
C:\Users\Me\Videos\a
C:\Users\Me\Videos\b
这意味着对于每个类别我都需要一个 "train" 和 "test" 文件夹,例如:
C:\Users\Me\Videos\a\train
C:\Users\Me\Videos\a\test
虽然我有一个包含以下信息的(编辑)csv 文件。因此,我不希望我的训练和拆分是随机的,而是基于我 sheet.
中的二进制代码
videoname |test|train|category|
-------------------------------
video1.mp4| 1 |0 |a |
video2.mp4| 1 |0 |b |
video3.mp4| 1 |0 |c |
video4.mp4| 0 |1 |c |
任何人都可以指出我如何使用该文件为我做这件事的方向吗?我能以某种方式将文件放入数据框中,告诉 Python 将文件移动到哪里吗?
编辑:
import os
import csv
from collections import defaultdict
videoroot = r'H:\Desktop'
transferrable_data = defaultdict(list)
with open(r'H:\Desktop\SVW.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
video_path_source = os.path.join(videoroot, row['Genre'], row['FileName'])
if (row['Train 1?'] == 0):
split_type = 'test'
else:
split_type = 'train'
video_destination_path = os.path.join(videoroot, row['Genre'], split_type, row['FileName'])
transferrable_data[video_path_source].append(video_destination_path)
首先要做的是阅读您的 excel 并构建从源文件到目标文件夹的映射:
VIDEO_ROOT_FOLDER = 'C:\Users\Me\Videos'
transferrable_data = defaultdict(list)
for row in excel_iteratable:
video_source_path = os.path.join(VIDEO_ROOT_FOLDER, row['category'], row['videoname'])
if (row['test'] == 1):
split_type = 'test'
else: # I suppose you can only dispatch to test or train in a row
split_type = 'train'
video_destination_path = os.path.join(VIDEO_ROOT_FOLDER, row['category'], split_type, row['videoname']))
transferrable_data[video_path_source].append(video_destination_path)
然后您可以使用以下两种方法之一编写脚本,将文件移动到正确的路径:
import os
os.rename("path/to/current/video", "path/to/destination/folder")
或者如果您需要复制(您不想更改您的视频文件夹):
from shutil import copyfile
copyfile("path/to/current/video", "path/to/destination/folder")
假设您的映射是:
transferrable_data = {'C:\Users\Me\Videos\a\video1.mp4' : ['C:\Users\Me\Videos\a\train\video1.mp4'], 'C:\Users\Me\Videos\a\video2.mp4': ['C:\Users\Me\Videos\b\test\video2.mp4', 'C:\Users\Me\Videos\c\test\video2.mp4']}
你可以这样做:
from shutil import copyfile
transferrable_data = {'C:\Users\Me\Videos\a\video1.mp4' : ['C:\Users\Me\Videos\a\train\video1.mp4'], 'C:\Users\Me\Videos\a\video2.mp4': ['C:\Users\Me\Videos\b\test\video2.mp4', 'C:\Users\Me\Videos\c\test\video2.mp4']}
for src, destination_list in transferrable_data.items():
for dest in destination_list:
copyfile(src, dest)
如何根据数据帧变量将包含多个视频文件的文件夹拆分为训练文件夹和测试文件夹,这些变量告诉我哪个视频应该在训练文件夹中,哪个视频应该在测试文件夹中? (在 Python 3.0 中)。其中多个视频位于单独的类别文件夹中
每个视频都可以在例如以下类别目录中找到:
C:\Users\Me\Videos\a
C:\Users\Me\Videos\b
这意味着对于每个类别我都需要一个 "train" 和 "test" 文件夹,例如:
C:\Users\Me\Videos\a\train
C:\Users\Me\Videos\a\test
虽然我有一个包含以下信息的(编辑)csv 文件。因此,我不希望我的训练和拆分是随机的,而是基于我 sheet.
中的二进制代码videoname |test|train|category|
-------------------------------
video1.mp4| 1 |0 |a |
video2.mp4| 1 |0 |b |
video3.mp4| 1 |0 |c |
video4.mp4| 0 |1 |c |
任何人都可以指出我如何使用该文件为我做这件事的方向吗?我能以某种方式将文件放入数据框中,告诉 Python 将文件移动到哪里吗?
编辑:
import os
import csv
from collections import defaultdict
videoroot = r'H:\Desktop'
transferrable_data = defaultdict(list)
with open(r'H:\Desktop\SVW.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
video_path_source = os.path.join(videoroot, row['Genre'], row['FileName'])
if (row['Train 1?'] == 0):
split_type = 'test'
else:
split_type = 'train'
video_destination_path = os.path.join(videoroot, row['Genre'], split_type, row['FileName'])
transferrable_data[video_path_source].append(video_destination_path)
首先要做的是阅读您的 excel 并构建从源文件到目标文件夹的映射:
VIDEO_ROOT_FOLDER = 'C:\Users\Me\Videos'
transferrable_data = defaultdict(list)
for row in excel_iteratable:
video_source_path = os.path.join(VIDEO_ROOT_FOLDER, row['category'], row['videoname'])
if (row['test'] == 1):
split_type = 'test'
else: # I suppose you can only dispatch to test or train in a row
split_type = 'train'
video_destination_path = os.path.join(VIDEO_ROOT_FOLDER, row['category'], split_type, row['videoname']))
transferrable_data[video_path_source].append(video_destination_path)
然后您可以使用以下两种方法之一编写脚本,将文件移动到正确的路径:
import os
os.rename("path/to/current/video", "path/to/destination/folder")
或者如果您需要复制(您不想更改您的视频文件夹):
from shutil import copyfile
copyfile("path/to/current/video", "path/to/destination/folder")
假设您的映射是:
transferrable_data = {'C:\Users\Me\Videos\a\video1.mp4' : ['C:\Users\Me\Videos\a\train\video1.mp4'], 'C:\Users\Me\Videos\a\video2.mp4': ['C:\Users\Me\Videos\b\test\video2.mp4', 'C:\Users\Me\Videos\c\test\video2.mp4']}
你可以这样做:
from shutil import copyfile
transferrable_data = {'C:\Users\Me\Videos\a\video1.mp4' : ['C:\Users\Me\Videos\a\train\video1.mp4'], 'C:\Users\Me\Videos\a\video2.mp4': ['C:\Users\Me\Videos\b\test\video2.mp4', 'C:\Users\Me\Videos\c\test\video2.mp4']}
for src, destination_list in transferrable_data.items():
for dest in destination_list:
copyfile(src, dest)