#python #python-datetime
Вопрос:
Мне нужно создать 5 файлов, все в одной папке с разными именами, но при запуске я получаю только один файл.
a = 1
x = datetime.now()
while a < 5:
a = 1
path = r'C:UsersUser1DesktopNewfolder'
file_name = x.strftime('%d-%m-%Y-%H-%M-%S-%f=HDTV.txt')
with open(os.path.join(path, file_name), 'w') as fp:
fp.write('this is a test')
Комментарии:
1. x определяется только в начале (вне цикла). Вы должны поместить
x
его внутрь цикла и, возможно, добавитьtime.sleep(0.01)
, просто чтобы убедиться, что вы не делаете что-то быстро.
Ответ №1:
Как сказал @Giacomo, проблема в том, что метка времени не зависит от цикла:
a = 1
x = datetime.now
while a < 5:
a = 1
path = r'C:UsersUser1DesktopNewfolder'
file_name = x().strftime('%d-%m-%Y-%H-%M-%S-%f=HDTV.txt')
with open(os.path.join(path, file_name), 'w') as fp:
fp.write('this is a test')
Комментарии:
1. внимательно изучите код,
now
который будет вызываться внутри цикла на каждом шаге. Это не элегантно, но хорошо объясняет разницу между 2 позициями вызова2. хе-хе, упустил это из виду ^^ так что для удобства чтения, может быть, я бы поставил
datetime.now()
вместоx()
этого 😉3. Даже при этом создается только один файл.
Ответ №2:
В первую очередь:
x
должно присутствовать внутриwhile
цикла, так как вам нужно текущее время на каждой итерации.
Кроме того, я думаю, что между созданием файлов не так много разницы во времени, и именно поэтому текущий созданный файл переопределяет предыдущий файл (так как метка времени одинакова, как и имена файлов).
У меня есть 2 предложения:
1. Использование различных имен файлов
Я предлагаю использовать эту переменную a
в имени файла, чтобы у вас были разные имена файлов.
import os
from datetime import datetime
path = os.getcwd()
a = 1
while a < 5:
x = datetime.now()
file_name = f"{x.strftime('%d-%m-%Y-%H-%M-%S-%f=HDTV')}_{a}.txt"
with open(os.path.join(path, file_name), 'w') as fp:
fp.write(f'this is a test')
a = 1
2. Использование time.sleep()
Другой способ-вы можете использовать time.sleep()
для приостановки выполнения на некоторое время (в зависимости от ваших требований), чтобы имена файлов отличались на каждой итерации.
Комментарии:
1. Это неправильный путь, потому что проблема заключалась не в скорости цикла, а в том, что метка времени не зависит от самого цикла.
2. Но метка времени вычисляется каждый раз внутри цикла. Верно?
3. Мой комментарий относится к описанию, а не к коду, код правильный.