脚本将文件重新排列到正确的文件夹中

2024-10-16 20:43:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含三列的csv文件:第一列有两个不同的条目“坏”或“好”。第2列中的不同条目是learn、query和test,第三列是文件路径名,指示在何处查找文件

bad test vff/v1/room_10-to-room_19_CDFFN5D5_x_0000  
bad test vff/v1/room_10-to-room_19_BVFGFGN5D5_x_0023  
bad learn vff2/v3/room_01-to-room_02_ERTY8LOK_x_00039  
bad learn vff/v3/room_01-to-room_02_TRT8LOK_x_00210  
bad query vff/v3/room_16-to-room_08_56TCS95_y_00020  
bad query vff2/v3/room_16-to-room_08_856C6S95_y_00201  
good test person/room_44/exit_call_room__5818     
good test person/room_34/cleaning_pan__812   
good learn person/room_43/walking_in_cafe_edited__717  
good learn person/room_54/enterit_call_room__387  
good query person/room_65/talki_speech_cry__1080  
good query person/room_75/walking_against_wall__835 

使用这个csv,我想基于Column 2创建三个文件夹。所以基本上,使用第2列创建三个文件夹,即test、learn和query。在这3个文件夹中,我想根据第1列创建两个文件夹,即坏文件夹和好文件夹。然后能够使用第3列提取数据,并将相应的文件放在这些定义的文件夹中。是否有python或命令行脚本可以做到这一点


Tags: 文件csvtotest文件夹条目v3query
1条回答
网友
1楼 · 发布于 2024-10-16 20:43:39

假设此csv文件名为file.csv

#!/bin/bash
FILE="file.csv"

# Create direcory structure
for C2 in `cat ${FILE} | cut -f 2 -d ',' | sort -u`
do
    for C1 in `cat ${FILE} | cut -f 1 -d ',' | sort -u`
    do
        mkdir -p "${C2}/${C1}"
    done
done

# Move files
while IFS= read -r line
do
    file="$(echo $line | cut -f 3 -d ',' | tr -d ' ')"
    dir="$(echo $line | cut -f 2 -d ',' | tr -d ' ')"
    dir+="/$(echo $line | cut -f 1 -d ',')"
    mv "${file}" "${dir}"
done < "${FILE}"

在这个bash脚本中发生的一些事情:

  1. cut此命令对于从delimiter分隔列表中选择n'th项非常有用。在本例中,我们使用的是csv,因此您将看到cut -d ','将逗号指定为分隔符
  2. 创建目录结构:第2列是目录,第1列是目录,因此cut -f 2列表是外部for循环,cut -f 1是内部for循环
  3. sort -u删除重复出现的字符串。这允许我们迭代给定列的所有不同条目
  4. 移动文件:file.csv中的每一行都包含一个需要移动的文件,因此需要对文件中的每一行进行迭代。然后从第2列和第1列中提取前面创建的目录,并将文件移动到新的主目录

相关问题 更多 >