Создание новых каталогов путем перебора заданных значений фрейма данных Python Pandas Numpy

#python #pandas #numpy #dataframe #operating-system

#python #pandas #numpy #фрейм данных #операционная система

Вопрос:

Я пытаюсь создавать папки, считывая каждую строку из определенных столбцов в фрейме данных:

 import numpy as np
import pandas as pd
import os

raw_df = pd.read_excel('C:/Users/home/Desktop/test/Inventory.xls')
df = raw_df[["Barcode", "Brand", "product_name"]]
  

raw_df: снимок

df: снимок

Мой текущий рабочий каталог: C:UsershomeDesktoptest

 path = os.getcwd()
new_path = os.chdir(path   "\products\")

print ("The new working directory is %s" % os.getcwd())
  

Новый рабочий каталог является C:UsershomeDesktoptestproducts

 for i in range(len(df)):
    row = df.iloc[i]
    barcode = row["Barcode"]
    brand = row["Brand"]
    product_name = row["Product_Name"]
    if(("\"   barcode   "\__"   brand   "\__"   product_name   "\") == False):
        os.makedir("\"   barcode   "\__"   brand   "\__"   product_name   "\")
    else:
        print("failed")
  

Мой вывод:

сбой сбой сбой сбой сбой сбой сбой

У меня более 400 строк в необработанном df, я просто тестировал его для первых 6 строк.

Чего я пытаюсь достичь, так это следующего: Снимок конечного результата

итак, я пытаюсь взять каждую строку и использовать их для создания нового каталога, разделенного двойным подчеркиванием «__».

Дополнительное примечание: Я удалил папки из рабочего каталога (те, которые я создал сам) и запустил приведенный выше код, но все еще не достиг результатов, к которым стремился.

Я бы создал скрипт bash, но это не вариант, поскольку мне нужно будет заполнять эти папки различными данными, такими как изображения и т.д., Когда я выполняю итерацию по фрейму данных.

любая помощь была бы высоко оценена. Я продолжу работать над этим и сообщу о решении для всех, если мне удастся это взломать.

Большое спасибо,

Комментарии:

1. с помощью if(("\" barcode "\__" brand "\__" product_name "\") == False) вы сравниваете строку с False. Это не способ проверить, существует ли каталог

2. Попробуйте os.path.exists(path) или os.path.isdir(path)

Ответ №1:

Попробуйте это с помощью os.path.join и os.path.isdir :

 for i in range(len(df)):
    row = df.iloc[i]
    barcode = row["Barcode"]
    brand = row["Brand"]
    product_name = row["Product_Name"]
    mypath = os.path.join(new_path, barcode, "__"   brand, "__"   product_name)
    if (os.path.isdir(mypath)):
        print("failed")
    else:
        os.mkdir(mypath)
  

Комментарии:

1. @JameBlonde попробуйте напечатать brand, возможно, он пустой

Ответ №2:

@vercelli, спасибо за всю вашу помощь и указание правильного направления, мне удалось заставить следующий код работать:

 for i in range(len(df)):
    row = df.iloc[i]
    barcode = row["Barcode"]
    brand = row["Brand"]
    product_name = row["Product_Name"]

    mypath = os.getcwd()   "\"   barcode   "__"   brand   "__"   product_name   "\"

    if(os.path.isdir(path) == False):
        os.mkdir(path)
    else:
        print("failed")
  

как упоминалось @vercelli, убедитесь, что ваш фрейм данных не содержит ни одного из значений в своем поле:

/:*?»<>|

поскольку это недопустимые символы для создания каталогов, я не слишком знаком с другими системами, но Windows, безусловно, не принимает эти символы для создания каталогов с этими значениями.