JuniorPython
JuniorPython

Reputation: 113

shutil move based on csv filename

hi guys currently moving file based on filename on my csv file but it always move the files first and then read the filename so it always got error already exist like this

Error: Destination path 'Sortir/Membuka kertas contekan/aug1_Data16_133_86.jpg' already exists

CODE

import pandas as pd

data = pd.read_csv('train.csv')
filenames = data['filename'].values
filenames = filenames.tolist()
classes = data['class'].values
classes = classes.tolist()

print(filenames)
print(classes)
import shutil
import os

for index, row in data.iterrows():
  print(row['filename'], os.path.join("Sortir",row['class']))
  if not os.path.exists(os.path.join("Sortir",row['class'])):
    print("[INFO] 'creating {}' directory".format(os.path.join("Sortir",row['class'])))
    os.mkdir(os.path.join("Sortir",row['class']))
  shutil.move(os.path.join("images",row["filename"]), os.path.join("Sortir",row['class']))

Anyone know how to do the read the row first and then move the file? or maybe keep continue to read other row even if the file that I want to move being already moved?

Found the Answer Code here :

import shutil
import os
import pandas as pd

data = pd.read_csv('test.csv')
filenames = data['filename'].values
filenames = filenames.tolist()
classes = data['class'].values
classes = classes.tolist()

print(filenames)
print(classes)
for index, row in data.iterrows():
  if not os.path.exists(os.path.join("SortirTest",row['class'])):
    print("[INFO] 'creating {}' directory".format(os.path.join("SortirTest",row['class'])))
    os.mkdir(os.path.join("SortirTest",row['class']))
  input_name  = os.path.join("images", row["filename"])
  output_name = os.path.join("SortirTest", row['class'], row['filename'])
  if os.path.exists(input_name):
    dest = shutil.move(input_name, output_name)
    print("This File Has Been Moved:", input_name)
  else:
    print("This File Doesnt Exist :", input_name)
    continue

Upvotes: 0

Views: 290

Answers (2)

Diego Ramirez Vasquez
Diego Ramirez Vasquez

Reputation: 146

In shutil.move() function you have to add the filename in the new directory too:

input_name  = os.path.join("images", row["filename"])
output_name = os.path.join("Sortir", row['class'], row['filename'])
shutil.move(input_name, output_name)

Upvotes: 1

D4Vinci
D4Vinci

Reputation: 53

Have you tried to clear the 'Sortir' folder before running the script?

Upvotes: 0

Related Questions