ошибка типа python: аргумент join() должен быть str, байт или os.Объект, подобный пути, а не «список»

#python #csv

#питон #csv

Вопрос:

У меня есть CSV-файл, содержащий 28 UUID

Я хотел бы создать цикл python, который запускает каждый uuid отдельно и помещает его в путь к файлу

напр. Org/datasets/uuid/data

Я попробовал нижеприведенное, но потерпел неудачу

 import os import csv  uuid = [] with open('C:/Users/Public/file.csv', 'r') as file:  reader = csv.reader(file)  for row in reader:  uuid.append(row)  for i in uuid:  filepath = os.path.join("org/datasets/", i , "/data")  print(filepath)  

ошибка заключается в TypeError: join() argument must be str, bytes, or os.PathLike object, not 'list'

CSV — файл очень упрощен и выглядит следующим образом:

uuid пустой
uuid1 пустой
uuid2 пустой

Комментарии:

1. В приведенном коде приведен uuid список списков. Вам нужно выбрать нужный элемент из каждой строки входного файла (каждая строка предоставляется вам в виде списка из-за использования csv.reader ) и сохранить его.

2. Как создать цикл, который поместит uuid в путь к файлу, как я показал, извлекая uuid из CSV?

3. Как выглядит ваш CSV-файл? Никто не может дать вам реальный ответ, не зная, что uuid имеет значение

4. @BTables см. отредактированный код. CSV содержит только идентификаторы uuid

5. В этом случае вы хотите uuid.append(row[0])

Ответ №1:

В вашем цикле for любое значение i соответствует строке в вашем csv-файле. Таким образом, он выходит в виде списка, который вы не можете сопоставить с str. Вместо этого вы должны взять первый элемент своего списка(фактический uuid).

 for i in uuid:  filepath = os.path.join("org/datasets/", i[0] , "/data")  print(filepath)  

Комментарии:

1. Я хотел использовать вместо , этого, но в остальном это сработало — спасибо!

2. Если вы напрямую соединяете строки вместе, вы можете просто удалить os.path.join их, так как они больше ничего не делают.