Python实现根据TXT文件的标签将不同文件归类至不同文件夹

1. 背景描述

最近在处理文件的时候,需要将文件根据TXT中的标签,进行分类整理至不同文件夹下。

具体情况是这样的。

首先在一个文件夹下,有这样一系列的mp3文件

├── music
       ├── test_00001.mp3
       ├── test_00002.mp3
       ├── test_00003.mp3
       ├── test_00004.mp3
       ├── ......
       ├── train_00001.mp3
       ├── train_00002.mp3
       ├── train_00003.mp3
       ├── train_00004.mp3
       ├── .......

然后,在一个TXT文件中,对每个mp3文件,都标注了文件类别

test_00001.mp3 1
test_00002.mp3 3
test_00003.mp3 2
test_00004.mp3 3
....
train_00001.mp3 2
train_00002.mp3 3
train_00003.mp3 4
train_00004.mp3 1

其中第一列就是对应文件的名字第二列就是该文件所属的类别

然后,还给出了不同类别对应的分类的具体名称

1: Classical
2: Rock 
3: Symphony
4: Country 

所以,主要目的就是实现将各个音乐文件,根据标签进行分类至不同文件夹。

同时,文件名带有test的文件,要放在test文件夹下的分类中,带有train的文件,要放在train文件夹下的分类中。

最终我们想实现的结果是这样的:

├── music_split
       ├── test
              ├── Classical
                     ├── test_00001.mp3
                     ├── ......
              ├── Rock
                     ├── test_00003.mp3
                     ├── ......
              ├── Symphony
                     ├── test_00002.mp3
                     ├── test_00004.mp3
                     ├── ......
              └── Country
                     ├── ......
       └── train
              ├── Classical
                     ├── train_00004.mp3
                     ├── ......
              ├── Rock
                     ├── train_00001.mp3
                     ├── ......
              ├── Symphony
                     ├── train_00002.mp3
                     ├── ......
              └── Country
                     ├── train_00003.mp3
                     ├── ......

接下来使用Python实现这个小小的功能。

2. 功能实现

详细源码如下:

import os
import shutil

# 读入分类的标签txt文件
label_file = open("E:\\【数据集】\\music\\list_label.txt", 'r')
# 原始文件的根目录
input_path = "E:\\【数据集】\\music\\music"
# 保存文件的根目录
output_path = "E:\\【数据集】\\music\\music_split"
# 标签数组
lables = ["Classical", "Rock", "Symphony", "Country"]

# 一行行读入标签文件
data = label_file.readlines()
# 计数用
i = 1
# 遍历数据
for line in data:
    # 通过空格拆分成数组
    str1 = line.split(" ")
    # 第一个是文件名
    file_name = str1[0]
    # 第二个是标签类别,并去除最后的换行字符
    file_label = str1[1].strip()
    # 原始文件的路径
    old_file_path = os.path.join(input_path, file_name)
    # 新文件路径
    new_file_path = ""

    # 如果文件名中有test字符,将其保存至test文件夹下的对应标签文件夹中
    if "test" in file_name:
        new_file_path = os.path.join(output_path, "test", lables[int(file_label) - 1])
    # 如果文件名中有 train 字符,将其保存至train文件夹下的对应标签文件夹中
    elif "train" in file_name:
        new_file_path = os.path.join(output_path, "train", lables[int(file_label) - 1])

    # 如果路径不存在,则创建
    if not os.path.exists(new_file_path):
        print("路径 " + new_file_path + " 不存在,正在创建......")
        os.makedirs(new_file_path)

    # 新文件位置
    new_file_path = os.path.join(new_file_path, file_name)
    print("" + str(i) + "\t正在将 " + old_file_path + " 复制到 " + new_file_path)
    # 复制文件
    shutil.copyfile(old_file_path, new_file_path)

    i = i + 1
# 完成提示
print("完成")

源码中已经给出了详细的注释。

如果有同样或者类似的需求,可以稍作修改后,直接使用此脚本。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾年之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值