Нет такого файла или каталога для xml-файлов

#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 того, где находится реальное местоположение. Первого не существует.