Python: помощь при использовании счетчиков и записи файлов

Возможный дубликат:
Python: Как создать последовательные имена файлов?

Мне было предложено использовать отдельный файл в качестве счетчика, чтобы предоставить мои файлы последовательным именам файлов, но я не понимаю, как это сделать. Мне нужны имена файлов, чтобы иметь последовательные номера, такие как file1.txt, file2.txt, file3.txt. Любая помощь приветствуется!

Изменить: Моя ошибка, я забыл сказать, что код делает 1 файл, когда он выполняется, и ему нужен способ сделать новый отдельный с другим именем файла.

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

Ответ 1

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

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

Что-то вроде (для файлов в текущем каталоге):


import os.path

def next_file_name(): num = 1 while True: file_name = 'file%d.txt' % num if not os.path.exists(file_name): return file_name num += 1

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

Ответ 2

Что-то вроде этого?

n = 100
for i in range(n):
  open('file' + str(i) + '.txt', 'w').close()

Ответ 3

Гипотетический пример.

import os
counter_file="counter.file"
if not os.path.exists(counter_file):
    open(counter_file).write("1");
else:
    num=int(open(counter_file).read().strip()) #read the number
# do processing...
outfile=open("out_file_"+str(num),"w")
for line in open("file_to_process"):
    # ...processing ...
    outfile.write(line)    
outfile.close()
num+=1 #increment
open(counter_file,"w").write(str(num))

Ответ 4

# get current filenum, or 1 to start
try:
  with open('counterfile', 'r') as f:
    filenum = int(f.read())
except (IOError, ValueError):
  filenum = 1

# write next filenum for next run
with open('counterfile', 'w') as f:
  f.write(str(filenum + 1))

filename = 'file%s.txt' % filenum
with open(filename, 'w') as f:
  f.write('whatever you need\n')
  # insert all processing here, write to f

В Python 2.5 вам также понадобится первая строка from __future__ import with_statement для использования этого примера кода; в Python 2.6 или выше вы этого не сделали (и вы могли бы использовать более элегантное решение для форматирования, чем этот оператор %, но это очень незначительная проблема).