@JRBRO

Как логичнее дописывать название файла из вывода?

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

#1-0.89
#1-true
#1-257


Делается это так-

sys.stdout = open("#"+(b)+"="+str(score)+".txt", "w")
sys.stdout = open("#"+(b)+"="+str(scale)+".txt", "w")
sys.stdout = open("#"+(b)+"="+str(points)+".txt", "w")


Вывод который я хочу получить
#1-0.89_true_257

Все три скрипта независимые, поэтому создают 3 разных тхт файла

Я вижу два варианта развития:

1. Засунуть все в один скрипт, чтобы было три вывода (но есть некоторые сложности с рефактором всех работ, такой вариант мне не очень)
2. Более удобный вариант, это дописывать инфу. Но как реализовать проверку:
Есть ли файл #1
Какой инфы в нем не хватает

Что бы Вы посоветовали? Повторюсь, все-все засунуть в один питон файл было бы не очень удобным решением, к нему прибегну лишь если второй вариант никак нереализуем

В двух словах, как дописывать названия:

Первый #1-0.89
Второй #1-0.89-true
Третий #1-0.89-true-257


Решение которое пришло в голову это просто брать имя существуюшего и приписывать его, но слишком много строк. Должен точно быть вариант как не переписывать, а дописывать

head, tail = os.path.split(path_to_1_output)
sys.stdout = open("#"+(b)+tail+str(scale)+".txt", "w"
...
head, tail = os.path.split(path_to_2_output)
sys.stdout = open("#"+(b)+tail+str(points)+".txt", "w"
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Ох... сударь, вы творите какую-то дичь!
Зачем присвивать дескриптор открытого на запись файла в sys.stdout?
Вы пытаетесь передавать некие данные из скриптов через имя пустого файла в файловой системе?
Тот ещё изврат, конечно.
А как вы эти скрипты запускаете? В разнобой в произвольном порядке? Что мешает содержимое трёх скриптов забрать в три отдельные функции, а из их результатов собрать строку, которая послужит именем нового файла? Какой ещё рефакторинг? Да и в чем проблема держать скрипты в отдельных файлах, но импортировать их в одном и в нем же создавать нужный сигнальный файл?
То, что пытаетесь сделать вы, выглядит как страшный костыль, а по факту костылём и является.

Почему конкатениря строку вы не пользуетесь форматными строками?
Вместо нечитаемого:
"#"+(b)+tail+str(scale)+".txt"
будет элегантное:
f"#{b}{tail}{scale}.txt"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы