Ошибка Python при переименовании файлов в windows - PullRequest
2 голосов
/ 01 января 2012

Я пытаюсь присвоить всем jpg-файлам в папке случайное имя, чтобы они отображались в полуслучайном порядке на моей цифровой фоторамке

Это код, который я пытаюсь использовать:

import os
import random

for filename in os.listdir("."):
    hold = random.randint(1,100000)
    f=str(hold)+'.jpg'

    if(filename.endswith('.jpg') or (filename.endswith('.JPG'))):
        os.rename(filename,f)

Однако, когда я запускаю его, я получаю:

WindowsError: [Error 82] The directory or file cannot be created.

Все, что я видел, выглядит так, будто мой код должен работать, я не знаю, почему он не запускается.

РЕДАКТИРОВАТЬ: похоже, из-за того, что в имени файла, который я пытаюсь переименовать, есть пробелы

EDIT2: я копировал файлы на SD-карту, отформатированную как FAT, и в папке, в которой я ее запускал, было максимальное количество элементов. Я решил это, переместив пару файлов в подкаталог.

Ответы [ 4 ]

0 голосов
/ 28 января 2012

Я копировал файлы на SD-карту, отформатированную как FAT, и в папке, в которой я ее запускал, было максимальное количество элементов. Я решил это, переместив пару файлов в подкаталог.

0 голосов
/ 01 января 2012

Насколько я понимаю, проблема в том, что переменная filename не является реальным файлом, а является строкой. os.listdir () возвращает список строк, которые являются именами файлов в этой папке. Вам нужно использовать open ("w", имя файла), чтобы открыть файл, затем переименовать его и затем сохранить его.

0 голосов
/ 01 января 2012

Взглянув на документацию для os.rename(), в Windows он вызовет OSError, если файл, который вы пытаетесь переименовать, уже существует (поскольку нет способа реализовать атомное переименование в ОС). То есть , если файл, в который вы переименовываете свой JPEG, уже присутствует в каталоге, os.rename не будет работать в Windows.

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

filelist = os.listdir('.')
for filename in filelist:
    hold = random.randint(1,100000)
    f=str(hold)+'.jpg'

 if filename.lower().endswith('.jpg') and f not in filelist:
    os.rename(filename,f)
0 голосов
/ 01 января 2012

Возможно, ваше переименование не удалось.Попробуйте добавить к вашему коду отладочную печать и посмотрите, когда именно это даст сбой.Перед переименованием добавьте print 'Renaming %s to %s' % (filename, f) и посмотрите, не удастся ли переименовать.

...