#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
их, так как они больше ничего не делают.