Как вставить указанный c текст после имени файла, чтобы переименовать его в python? - PullRequest
0 голосов
/ 06 мая 2020

Я использую доску Google Coral. Скрипт, который я использую, можно найти здесь: Coral's classify_image.py

Я изменил его (все выделено жирным шрифтом ), чтобы я мог сохранить все времена вывода . По сути, я сохраняю их в списке, а затем использую "pickle", чтобы сохранить этот список в файл. Имя файла: "file_inference_time"

Проблема в том, что у меня много моделей, и если я начну запускать их все, этот файл будет перезаписан. Поэтому хотелось бы, чтобы название модели было прикреплено. Пример:

Что у меня есть:

file_inference_time

что я хотел бы иметь:

file_inference_time_mobilenet_v2

ЧТО У меня есть

print('----INFERENCE TIME----')
  print('Note: The first inference on Edge TPU is slow because it includes',
        'loading the model into Edge TPU memory.')

  **list_inference_time = []** #List where the "inference_time" will be stored

  for _ in range(args.count):
    start = time.monotonic()
    interpreter.invoke()
    inference_time = time.monotonic() - start
    classes = classify.get_output(interpreter, args.top_k, args.threshold)

     **list_inference_time.append(inference_time)** #Adding "inference_time" into the list

    print('%.1fms' % (inference_time * 1000))


  print('----SAVING INFERENCE TIME IN A LIST----')
  print('Note: "inference_time" has been saved in "list_inference_time" list')

  **with open ("file_inference_time", "wb")) as fp:   
      pickle.dump(list_inference_time, fp)**

МОЯ ПОПЫТКА получить то, что мне хотелось бы иметь

  with open ('file_inference_time_{}'.format((args.model), "wb")) as fp:   
      pickle.dump(list_inference_time, fp)

ИСПОЛНЕНИЕ И ОШИБКА, КОТОРЫЕ Я ПОЛУЧАЮ enter image description here


Я тоже подумал об использовании словаря вместо списка.


1 Ответ

1 голос
/ 07 мая 2020

Я думаю, что вы на правильном пути, однако вы получаете ошибку ENOENT , которую выдает файловая система. Для python при открытии файла в режиме записи байтов он должен открыть новый файл для записи в него. Однако в вашем случае он пытается записать в новый файл, который находится в каталоге, которого сейчас не существует (file_inference_time_models). Вот иллюстрация:

# Writing to a new file
with open('newfile.txt', 'wb') as fp:
    fp.write(bytes('test bytes','utf-8')) # WORK FINE

# Also writing to a new file but to a directory that doesn't exist.
with open('new_dir/test.txt', 'wb') as fp:
    fp.write(bytes('test bytes','utf-8')) # ENOENT

Это просто краткое изложение того, почему вы столкнулись с этой проблемой при выполнении кода. Самый простой способ исправить это - создать каталог перед запуском кода. Однако я не думаю, что это то, что вы хотите, вам нужно file_inference_time_mobilenet_v2, а не file_inference_time_models/model_name.tflite, поэтому я предлагаю проверить ваш logi c. Когда вы берете всю строку из args.model, он дает вам весь каталог моделей + имя модели, если вы обрезаете эту строку, чтобы получить только ту часть, которую хотите, тогда все это будет работать.

Ура!

...