Используя файл CSV для перемещения файлов в различные каталоги

У меня есть этот большой каталог 1000 + файлы от набора данных машинного обучения, но эти файлы имеют различные качества (изображения роз по сравнению с возвышениями для хранения его простым). У меня есть этот файл CSV с именами файлов каждого из этих объектов в наборе данных, а также их классификации (розы по сравнению с гирляндами). Как я могу прочитать этот файл CSV и сказать, что мой файловый менеджер для перемещения всего из повысился фотографии до одного каталога и всех гирляндных фотографий к другому каталогу? Я должен был бы использовать сценарий Bash или являюсь этим что-то, что это уже встроено в Наутилус?

2
задан 11 December 2016 в 01:26

2 ответа

Хорошо, другу и мне удалось записать сценарий в Python, который решил это вполне хорошо.

# Import csv
import csv
# Import os
import os

# Main Function
def main():
# Open dataset file
dataset = open('dataset.csv', newline='')

# Initialize csvreader for dataset
reader = csv.reader(dataset)

# Read data from reader
data = list(reader)

# Variables for progress counter
lines = len(data)
i = 0

# Analyze data in dataset
for row in data:
    # Assign image name and state to variables
    image = row[0] + '.jpeg'
    state = row[1]

    # Print image information
    print('({}/{}) Processing image ({}): {}'.format(i + 1, lines, state, image))

    # Increment i
    i += 1

    # Determine action to perform
    if state is '0':
        # Attempt to move the file
        try:
            # Move the file to nosymptoms/
            os.rename(image, 'nosymptoms/' + image)
            # Inform the user of action being taken
            print(' -> Moved to nosymptoms/')
        except FileNotFoundError:
            # Inform the user of the failure
            print(' -> Failed to find file')
    elif state in ['1', '2', '3', '4']:
        # Attempt to move the file
        try:
            # Move the file to nosymptoms/
            os.rename(image, 'symptoms/' + image)
            # Inform the user of action being taken
            print(' -> Moved to symptoms/')
        except FileNotFoundError:
            # Inform the user of the failure
            print(' -> Failed to find file')

# Execute main function if name is equal to main
if __name__ == '__main__':
main()

Это имело тенденцию работать лучше, потому что у меня было больше категорий для контакта с..., надо надеяться, это будет работать на любого с той же проблемой.

0
ответ дан 2 December 2019 в 09:36

Вот скрипт bash, который должен делать то, что вы хотите:

#!/bin/bash

fileNameIndex=0   # set to index of file name
categoryIndex=1   # set to index of category

IFS=",""$IFS"     # add comma to break lines at commas

while read -a tokens;    # read a line and break it into tokens separated by commas
do
    file=${tokens[$fileNmeIndex]}       # get the file name
    category=${tokens[$categoryIndex]}  # get the category
    if [ ! -d $category ]; then         # check if the category directory exists
        mkdir $category;                # make the category directory
    fi
    mv $file $category                  # move the file into the category directory
done

Сохраните этот скрипт в файле, возможно, do_moves.sh, отредактируйте его, чтобы установить правильные значения для fileNameIndex и categoryIndex, затем запустите это как:

./ do_moves.sh < data.csv

где data.csv - ваш CSV-файл. Убедитесь, что у вас нет файлов с таким же именем, как у категории, прежде чем запускать это.

0
ответ дан 2 December 2019 в 09:36

Другие вопросы по тегам:

Похожие вопросы: