Python读取CSV的UUID构造路径时os.path.join报TypeError错误
问题解决方法
报错根因
csv.reader 迭代返回的每一行row是列表类型,对应CSV当前行的所有字段值。你当前代码直接将整行列表存入uuid列表,后续调用os.path.join时传入了列表类型的参数,不符合函数要求的字符串/路径类对象参数规则,因此抛出类型错误。
另外你的CSV每行第一个元素才是UUID值,第二个是空字段,需要显式取每行的第一个元素使用,同时注意要跳过CSV的表头行。
修正后代码(基础版)
import os import csv uuid_list = [] with open('C:/Users/Public/file.csv', 'r', encoding='utf-8') as file: reader = csv.reader(file) # 跳过表头行 next(reader) for row in reader: # 取每行第一个元素即UUID,同时去除可能的空格、换行符 uuid_val = row[0].strip() uuid_list.append(uuid_val) for uuid in uuid_list: # os.path.join自动处理路径分隔符,无需手动添加斜杠 filepath = os.path.join("org", "datasets", uuid, "data") print(filepath)
优化方案(按字段名取值更稳妥)
如果你的CSV表头固定,可使用csv.DictReader直接通过字段名取UUID,避免字段顺序变动带来的问题:
import os import csv uuid_list = [] with open('C:/Users/Public/file.csv', 'r', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: # 直接通过表头字段名取UUID,逻辑更清晰 uuid_val = row['uuid'].strip() uuid_list.append(uuid_val) for uuid in uuid_list: filepath = os.path.join("org", "datasets", uuid, "data") print(filepath)
补充说明
- 读取文件时指定
encoding参数可避免中文/特殊字符乱码问题,可根据你的CSV实际编码调整为gbk等其他编码。 - 路径拼接时直接将所有路径段作为参数传入
os.path.join即可,函数会自动适配不同操作系统的路径分隔符,兼容性更好。
内容的提问来源于stack exchange,提问作者python_qt
相关产品推荐
相关产品推荐

