Отлично! Спасибо! Помещение i = 1 перед первым оператором for сделало свое дело!

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

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 и т. Д.

Ответы на вопрос(1)

Твой

i = 1 

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

 makerofmaps109 апр. 2018 г., 16:43
Отлично! Спасибо! Помещение i = 1 перед первым оператором for сделало свое дело!

Ваш ответ на вопрос