Увеличение числа в имени файла, когда файл существует

Я все еще новичок в Python (3). У меня есть НАГРУЗКА данных датчика, но ограничение загрузки вынуждает меня извлекать данные по частям, а не все сразу (каждый загруженный файл .zip содержит папку с файлами .csv для данных каждого датчика в течение заданного периода времени). Таким образом, у меня есть десятки больших файлов .csv, распределенных по нескольким папкам, которые я в конечном итоге хотел бы объединить / объединить / добавить в один файл .csv для полных данных каждого датчика. Чтобы усложнить задачу, имена файлов .csv для каждого датчика в папках идентичны. Я разработал следующий код для переименования и перемещения файлов в одну папку, чтобы позже я мог объединить / объединить / добавить. Он отлично работает, за исключением того факта, что число, которое я вставляю в новое имя файла, не увеличивается.

import os
path = r"C:\directory\sensordatafolders" #folders with .csv files
newPath = r"C:\directory\new" #destination for renamed files
for root, dirs, files in os.walk(path):
    for name in files:
        base, extension = os.path.splitest(name)
        if not os.path.exists(os.path.join(newPath, base + extension))
             oldfile = os.path.join(os.path.abspath(root), name)
             newfile = os.path.join(newPath, base + extension)
             os.rename(oldfile, newfile)
        else:
             i = 1
             oldfile = os.path.join(os.path.abspath(root), name)
             newfile = os.path.join(newPath, base + '_' + str(i) + extension)
             i +=1
             os.rename(oldfile, newfile)

После второго цикла (файлы * .csv и * _1.csv успешно перемещены) он дает мне ошибку «Невозможно создать файл, когда этот файл уже существует». Это потому, что (я думаю) он пытается создать файлы * _1.csv вместо увеличения до * _2.csv и т. Д.


person makerofmaps1    schedule 06.04.2018    source источник


Ответы (1)


Ваш

i = 1 

После того, как else не должно быть, он продолжает устанавливать i в 1, таким образом, всегда делая значение i равным 2, попробуйте использовать его за пределами операторов for

person Shahriyar Shawon    schedule 06.04.2018
comment
Превосходно! Спасибо! Помещение i = 1 перед первым оператором for помогло! - person makerofmaps1; 09.04.2018