#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, безусловно, не принимает эти символы для создания каталогов с этими значениями.