Преобразование TIF в JPEG - нет такого файла или каталога

Я использую этот код (ответ @user2019716) для преобразования .tif в .jpeg для использования в API обнаружения объектов tensorflow. Раньше я делал конвертацию без проблем, но почему-то сегодня я получаю ошибку No such file or directory: '__0.tif' и не понимаю, почему это происходит. Я проверил каталог, который я поместил в C:/Users/name/Desktop/phantom80_labelImg/TIF/, и там есть список .tif файлов, начиная с __0.tif до __34.tif. Я знаю, что код работает, потому что я использовал его раньше, но я не знаю, почему он сейчас не читает файлы .tif.

Какие-либо предложения?

import os
from PIL import Image

for infile in os.listdir("C:/Users/name/Desktop/phantom80_labelImg/TIF/"):
    print("file : " + infile)
    if infile[-3:] == "tif" or infile[-3:] == "bmp" :
       # print "is tif or bmp"
       outfile = infile[:-3] + "jpeg"
       im = Image.open(infile)
       print("new filename : " + outfile)
       out = im.convert("RGB")
       out.save(outfile, "JPEG", quality=90)
C:\Users\name\anaconda3\envs\MaskRCNN_SpeCraft\python.exe C:/Users/name/z/MaskRCNN_SpeCraft/tif_to_jpeg.py
Traceback (most recent call last):
  File "C:/Users/name/z/MaskRCNN_SpeCraft/tif_to_jpeg.py", line 12, in <module>
    im = Image.open(infile)
  File "C:\Users\name\anaconda3\envs\MaskRCNN_SpeCraft\lib\site-packages\PIL\Image.py", line 2891, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: '__0.tif'
C:\Users\name\z\MaskRCNN_SpeCraft
file : __0.tif

Process finished with exit code 1

Замените / в имени пути на // Это работает?

Adi 09.12.2020 19:53

@AdityaChavan Нет, я получаю ту же ошибку.

Binx 09.12.2020 19:54

Для доступности замените код и ошибки текстом.

Alastair McCormack 09.12.2020 19:54

Закомментируйте остальную часть кода и посмотрите, печатает ли строка print(infile) имена файлов.

Adi 09.12.2020 19:57

Если вы попытаетесь сохранить полный путь, а не просто имя файла, это сработает? то есть вместо того, чтобы просто outfile делать 'C:/whatever/' + outfile

Random Davis 09.12.2020 19:57

@AlastairMcCormack, отредактировал сообщение.

Binx 09.12.2020 20:02

В итоге я изменил свой рабочий каталог на конкретную папку, и это сработало. os.chdir("C:/Users/name/Desktop/phantom80_labelImg/TIF/). Хотя я не понимаю, зачем мне менять рабочий каталог, если я конкретно указываю, из какой папки я хочу вытащить .tif???

Binx 09.12.2020 20:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
356
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

os.listdir(dir) возвращает только имена файлов в этом каталоге (документация).

Чтобы открыть файл, вам нужно будет получить полный путь к файлу. Вы можете использовать os.path.join (документация)

root_dir = "C:/Users/name/Desktop/phantom80_labelImg/TIF/"
for filename in os.lisdir(root_dir):
    infile = os.path.join(root_dir, filename)
    # rest of your code

Да, это была следующая вещь, которую я только что попробовал, и это сработало. Спасибо за документацию!

Binx 09.12.2020 20:10

Другие вопросы по теме