#python #xml #for-loop #yolo #annotate
Вопрос:
У меня есть аннотированные изображения, которые хранятся в папке с аннотациями. Мне нужно преобразовать его в формат yolov5.
annotations = [os.path.join('annotations', x) for x in os.listdir('/content/gdrive/My
Drive/annotations') if x[-3:] == "xml"]
теперь в аннотациях есть:
annotations/100_1_0_20170110183726390.xml
annotations/100_1_2_20170105174847679.xml
annotations/100_1_2_20170110182836729.xml
когда я пытаюсь :
for ann in tqdm(annotations):
info_dict = extract_info_from_xml(ann)
convert_to_yolov5(info_dict)
annotations = [os.path.join('annotations', x) for x in os.listdir('annotations') if x[-3:] == "txt"]
Я получаю:
FileNotFoundError: [Errno 2] No such file or directory:
'annotations/100_1_0_20170110183726390.xml'
Ответ №1:
Похоже, что вы пытаетесь получить доступ annotations/100_1_0_20170110183726390.xml
к папке , которой не существует (хотя я думаю, что знаю, что вы пытаетесь сделать).
Программе необходимо знать весь путь к файлу, как в /content/gdrive/My Drive/annotations/
вместо annotations
.
Я думаю os.path.join('/content/gdrive/My Drive/annotations', x) for x in os.listdir('/content/gdrive/My Drive/annotations') if x[-3:] == "txt"
, может сработать, хотя и немного многословно.
Если вы пишете программу в том же каталоге , annotations
что и, вы, вероятно, можете использовать os.getcwd()
, который вернет текущий рабочий каталог. Тогда вы можете использовать:
myPath = os.getcwd()
myPath = myPath "annotations/"
os.path.join(myPath, x) for x in os.listdir(myPath) if x[-3:] == "txt"
Я думаю.
Комментарии:
1. В первой строке у меня есть аннотации, которые содержат все xml-файлы. Я также перечислил 3 файла, которые находятся в аннотациях. тогда почему он не находит xml-файл
2. @Nithya Он будет искать
annotations/100_1_0_20170110183726390.xml
вместо/content/gdrive/My Drive/annotations/100_1_0_20170110183726390.xml
того, где находится реальное местоположение. Первого не существует.