从 CSV 文件创建目录并只获取一个

Creating directories from a CSV file and getting just one

我简要解释一下在出现故障之前我做了什么: CSV 文件被读取并根据列的值分为 2 个不同的文件。 栏目指的是食物的种类和类别'carne'分为其他区别。 这就是为什么我决定分成 2 个 CSV 文件。这些 CSV 文件包含单列。

现在我想创建一些与这两个 CSV 文件相关的目录:

  1. 其他类别:包括鱼、沙拉、鸡蛋...
  2. Carne:包括不同类型的肉,需要放在 Meat 的子目录中

这是 carne.csv 的样子:

            0
0     carnero
1         ave
2     ternera
3       anade
4     cabrito
5       capon
6     caracol

类别应该这样排序:

Salad
Fish
...
Meat
    Chicken
    Beef
    ....

我写的代码是设置这两类目录是:

other_categories = pd.read_csv('other_categories.csv')
baseDir = "data/"
for category in other_categories:
    os.mkdir(os.path.join(baseDir,category))
    
carne = pd.read_csv ('carne.csv')
baseDir_carne = "data/carne/"
for category in carne:
    os.makedirs(os.path.join(baseDir_carne,category))

查看目录只创建了 1 个文件夹,名称为 '0'

为什么会这样?我该如何解决?

您正在使用 pandas 解析 CSV table,这会创建一个 DataFrame。

Read a comma-separated values (csv) file into DataFrame. pandas API reference pandas DataFrame API reference

这意味着你不能对每个方法都使用标准,因为DataFrame不是一个简单的集合。所以这部分不能按预期工作:

for category in other_categories:

为了迭代项目,我建议使用其中一种内置方法,例如 itertuples.

itertuples panda API reference

一个小例子。假设 x 是解析到 DataFrame 中的 CSV 文件:

import pandas as pd

x = pd.DataFrame([["carnero"],["ave"],["ternera"]])

for cat in x.itertuples():
    print(cat)

它将打印以下元组:

Pandas(Index=0, _1='carnero')

Pandas(Index=1, _1='ave')

Pandas(Index=2, _1='ternera')

您现在可以定期访问元组,例如,将 print(cat) 替换为 print(cat[1]) 以访问第二个元组元素,将 return 字符串。

将这些知识转移到您的代码中,for each 应该看起来像这样:

for category in carne.itertuples():
    os.makedirs(os.path.join(baseDir_carne,category[1]))

我希望这能解决您的问题,请随时询问您是否遗漏了什么。

干杯!