【问题标题】:Script to rearrange files into correct folders将文件重新排列到正确文件夹中的脚本
【发布时间】:2020-03-30 18:57:05
【问题描述】:

我有一个包含三列的 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,我想基于第 2 列创建三个文件夹。所以基本上,使用第 2 列创建三个文件夹,即测试、学习和查询。在这 3 个文件夹中的每一个中,我想根据第 1 列创建两个文件夹,即 bad 和 good。然后能够使用 column3 提取数据并将相应的文件放在这些定义的文件夹中。是否有可以执行此操作的 python 或命令行脚本?

【问题讨论】:

  • 您说csv 表示“逗号分隔值”,但您的示例中的值似乎用空格分隔。您希望您的信息用什么分隔符分隔?
  • 有没有 python 或命令行脚本可以做到这一点? 我敢肯定,在 Aether 的某个地方。请参阅How to Askhelp center

标签: python bash shell command-line batch-processing


【解决方案1】:

假设这个 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 列是 parent 目录,第 1 列是 child 目录,因此cut -f 2 列表是外部 for 循环,@987654330 @ 是内部 for 循环
  3. sort -u 删除重复出现的字符串。这允许我们遍历给定列的所有不同条目
  4. 移动文件:file.csv 中的每一行都包含一个需要移动的文件,因此遍历文件中的每一行。然后从第 2 列和第 1 列中提取我们之前创建的目录,并将文件移动到它的新家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2015-11-15
    • 2015-06-14
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多