从 CSV 文件创建目录并只获取一个
Creating directories from a CSV file and getting just one
我简要解释一下在出现故障之前我做了什么:
CSV 文件被读取并根据列的值分为 2 个不同的文件。
栏目指的是食物的种类和类别'carne'分为其他区别。
这就是为什么我决定分成 2 个 CSV 文件。这些 CSV 文件包含单列。
现在我想创建一些与这两个 CSV 文件相关的目录:
- 其他类别:包括鱼、沙拉、鸡蛋...
- 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]))
我希望这能解决您的问题,请随时询问您是否遗漏了什么。
干杯!
我简要解释一下在出现故障之前我做了什么: CSV 文件被读取并根据列的值分为 2 个不同的文件。 栏目指的是食物的种类和类别'carne'分为其他区别。 这就是为什么我决定分成 2 个 CSV 文件。这些 CSV 文件包含单列。
现在我想创建一些与这两个 CSV 文件相关的目录:
- 其他类别:包括鱼、沙拉、鸡蛋...
- 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]))
我希望这能解决您的问题,请随时询问您是否遗漏了什么。
干杯!