Избегайте перезаписи файлов с помощью цикла for

У меня есть список фреймов данных (df_cleaned), созданных из нескольких CSV-файлов, выбранных пользователем.

Моя цель - сохранить каждый фрейм данных в списке df_cleaned как отдельный CSV-файл локально.

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

Как я могу это исправить? Согласно моим самым базовым знаниям, возможно, я мог бы использовать оператор break-continue в цикле? Но я не знаю, как это правильно реализовать.

for i in range(len(df_cleaned)):
    outputFile = df_cleaned[i].to_csv(r'C:\...\Data Docs\TrainData\{}.csv'.format(name))
print('Saving of files as csv is complete.')

person mvx    schedule 05.09.2019    source источник
comment
Где изменена переменная name? Мне кажется, что он перезаписывается, потому что вы записываете в тот же файл (т.е. сохраняете данные в то же имя файла) в цикле.   -  person Ary    schedule 05.09.2019
comment
@Ary, это может быть проблемой. Вы знаете, как я могу это исправить? У меня есть список с именами файлов как отдельная часть кода, если это поможет?   -  person mvx    schedule 05.09.2019


Ответы (2)


Вы можете создать другое имя для каждого файла, например, в следующем примере я прикрепляю индекс к name:

for i in range(len(df_cleaned)):
    outputFile = df_cleaned[i].to_csv(r'C:\...\Data Docs\TrainData\{0}_{1}.csv'.format(name,i))
print('Saving of files as csv is complete.')

это создаст список файлов с именем <name>_N.csv с N = 0,..., len(df_cleaned)-1.

person FrancescoLS    schedule 05.09.2019
comment
Дает мне FileNotFoundError: [Errno 2] No such file or directory: 'C:\\...\\Data Docs\\TrainData\\fileLast.xlsm_0.csv', где fileLast — это имя последнего файла в списке. У меня есть список с именами файлов как отдельная часть кода, если это поможет? - person mvx; 05.09.2019
comment
Я не очень хорошо знаком с Windows-подобным сигналом, но ... в имени файла выглядит подозрительно. Что касается имен файлов, вы можете легко их использовать, например. name = nameList[i] в том же цикле, предполагая, что список имен файлов nameList - person FrancescoLS; 05.09.2019
comment
Первая попытка вашего кода дала мне ошибку выше. Просто нашел решение для себя, но опубликую его в ближайшее время. Большое спасибо за старания :) - person mvx; 05.09.2019

Очень простой способ решения. Только что сам придумал ответ. Публикация, чтобы помочь кому-то другому.

fileNames — это список, который я создал в начале кода для сохранения имен файлов, выбранных пользователем.

for i in range(len(df_cleaned)):
    outputFile = df_cleaned[i].to_csv(r'C:\...\TrainData\{}.csv'.format(fileNames[i]))
print('Saving of files as csv is complete.')

Сохраняет отдельную копию для каждого файла в указанном каталоге.

person mvx    schedule 05.09.2019