Я пытаюсь переименовать файлы в одной папке, по шаблону 0001, 0002, 0010, 0100 и т. Д. Я очень плохо знаком с Python, поэтому извините за то, что спросил что-то столь простое.

Я искал вокруг, и большая часть кода, с которым я сталкивался, переименовывает файлы (не так, как я хочу) или удаляет определенные символы. Я также сталкивался с кодом, который использует дополнительные модули (glob), которые только ведут меня дальше по кроличьей норе. Большая часть того, что я вижу, заставляет мою голову кружиться; на данный момент мои навыки не выходят за рамки простых функций, если, когда, для, в то время как заявления и так далее.

Я собрал воедино некоторый код, который я (несколько) понимаю, но он не работает.

import os

dir = os.listdir("D:\\temp\\Wallpapers")

i = 0

for item in dir:
    dst ="000" + str(i) + ".jpg"
    src = item
    dst = item + dst 

    # rename() function will 
    # rename all the files 
    os.rename(src, dst) 
    i += 1

Это ошибка, которую я получаю:

Traceback (most recent call last):
  File "rename.py", line 14, in <module>
    os.rename(src, dst)
FileNotFoundError: [WinError 2] The system cannot find the file specified: '00-Pyatna.jpg' -> '0000.jpg'
1
thekevinkalis 15 Авг 2019 в 12:29

2 ответа

Лучший ответ

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

import os

base_path = "D:/temp/Wallpapers"
files = os.listdir(base_path)


for i, fp in enumerate(files):
    dst = os.path.join(base_path, "{0:04d}.jpg".format(i))
    src = os.path.join(base_path, fp) 
    os.rename(src, dst) 
0
ivallesp 15 Авг 2019 в 09:37

Во-первых, вы можете получить максимальное количество, уже присутствующее в вашей папке, с помощью следующей функции

import re
def max_counter_in_files(folder):
    files = os.listdir(folder)
    maxnum = '0'
    if files:
        maxnum = max([max(re.findall("[\d]+", file)) for file in files])
    return maxnum

Например, если ваша папка содержит файлы

file001.txt
file002.txt
file003.txt

Тогда max_counter_in_files('path/to/your/files') вернется 3.

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

counter = int(self.max_counter_in_files(dest_path))
filename = f"filename{counter+1:04d}.txt"

filename тогда будет "filename0004.txt".

0
BlueRine S 15 Авг 2019 в 09:35