通过遍历指定的数据框值来创建新目录Python Pandas Numpy

时间:2019-03-08 16:46:29

标签: python pandas numpy dataframe operating-system

我正在尝试通过读取数据框中特定列的每一行来创建文件夹:

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:snapshot

df:snapshot

  

我当前的工作目录:C:\ Users \ home \ Desktop \ test \

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

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

新的工作目录为C:\ Users \ home \ Desktop \ test \ products \

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")

我的输出:

  

失败   失败了   失败了   失败了   失败了   失败

我在原始df中有超过400行,我只是在前6行中对其进行测试。

我要实现的目标如下:End Result snapshot

因此,我尝试使用每一行并使用它们创建一个新目录,并用双下划线“ __”分隔。

附加说明:我已经从工作目录(我自己创建的目录)中删除了这些文件夹,并运行了上面的代码,但仍然没有达到我想要的结果。

我将创建一个bash脚本,但这不是一个选择,因为当我遍历数据帧时,我将需要用各种数据(例如图像等)填充这些文件夹。

任何帮助将不胜感激。如果能够破解,我将继续努力,并提出解决方案,以使所有人受益。

非常感谢,

2 个答案:

答案 0 :(得分:0)

尝试使用os.path.joinos.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 :(得分:0)

@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")
所述,请确保您的数据框在其字段中不包含任何值:

  

/:*?“ <> |

由于这些字符是用于创建目录的无效字符,因此我对其他系统不太熟悉,但是Windows当然不接受那些用于使用这些值创建目录的字符。