You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过字典指定路径导入CSV遇TypeError:如何提取字典值为字符串?

解决TypeError: expected str, bytes or os.PathLike object, not dict_values的问题

你遇到的问题很明确:args.values()返回的是dict_values类型的视图对象,而你的MultiLabelTextProcessor构造函数需要的是字符串/Path类的路径对象,类型不匹配才导致了报错。下面给你几种实用的解决方法,按推荐程度排序:

1. 直接通过键名取值(最推荐)

既然你明确知道字典里的键是data_dir,直接通过键访问是最直观、最不容易出错的方式:

a = MultiLabelTextProcessor(args["data_dir"])

这种方式完全贴合你的代码意图,其他开发者读代码时也能一眼明白你要取哪个值。

2. 从dict_values中提取单个值

如果不确定键名,但能确定字典里只有一个键值对,可以用迭代器取第一个元素:

a = MultiLabelTextProcessor(next(iter(args.values())))

iter(args.values())把dict_values转成迭代器,next()取出第一个元素,效率很高,不需要创建额外的列表对象。

3. 转成列表后取索引(不推荐)

你也可以把dict_values转成列表,再取索引0的元素,但这种方式会创建完整列表,当字典元素较多时完全没必要:

a = MultiLabelTextProcessor(list(args.values())[0])

额外优化建议

看你的代码还有两个小细节可以完善:

  • 别忘了导入Path类:from pathlib import Path,不然会报NameError: name 'Path' is not defined
  • get_train_examples方法里可以直接用实例的self.data_dir,不用重复传参数,调用更简洁:
def get_train_examples(self, size=-1):
    filename = 'train.csv'
    data_df = pd.read_csv(os.path.join(self.data_dir, filename))
    return data_df

这样调用时直接写print(a.get_train_examples())就可以了。

修改后的完整代码示例:

import csv
import os
from pathlib import Path
import pandas as pd

PATH = Path("../../Toxic-comment-classification")
PATH.mkdir(exist_ok=True)
args = { "data_dir": PATH, }

class MultiLabelTextProcessor(DataProcessor):
    def __init__(self, data_dir):
        self.data_dir = data_dir
        self.labels = None
    def get_train_examples(self, size=-1):
        filename = 'train.csv'
        data_df = pd.read_csv(os.path.join(self.data_dir, filename))
        return data_df

# 使用推荐的键名取值方式
a = MultiLabelTextProcessor(args["data_dir"])
print(a.get_train_examples())

内容的提问来源于stack exchange,提问作者NathanaëlBeau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:27:55