機械学習データセットからの1000以上のファイルのこの大きなディレクトリがありますが、これらのファイルにはさまざまな品質があります(簡単にするためにバラとデイジーの写真)。このCSVファイルには、データセット内のこれらの各アイテムのファイル名とその分類(バラとヒナギク)が含まれています。このCSVファイルを読み取り、すべてのバラの写真を1つのディレクトリに移動し、すべてのデイジーの写真を別のディレクトリに移動するようファイルマネージャーに指示するにはどうすればよいですか? Bashスクリプトを使用する必要がありますか、それとも既にNautilusに組み込まれているものですか?
さて、友人と私は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 __== '__main__':
main()
対処するカテゴリが増えたので、これはうまくいく傾向がありました...うまくいけば、これは同じ問題を抱えている人にはうまくいくと思います。
これは、あなたが望むことをするべき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ファイルです。これを実行する前に、カテゴリと同じ名前のファイルがないことを確認してください。