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
相关产品推荐
相关产品推荐

