Перенести текст из одного файла в другой
У меня есть порядка 2000 работающих программ на Python. В конце каждой есть список, что правится вручную. Я хочу автоматизировать процесс добавления к этому списку новых данных. Эти данные одинаковы для всех программ и добавляются в самый конец файлов.
Я так понимаю, что нужно сделать несколько файлов а именно:
Data.txt- тот кусок кода что нужно вставить (подготовленные данные с кавычками, запятыми и т.д.). Например:"Rob35", "tube33",
- Файлы от 1 до 2000
Restart.py- то что добавит в каждый файл кусок кода
В итоге мы имеем 2000 файлов, что лежат отдельно, и когда мне нужно будет их изменить, то я:
- Копирую 2000 файлов без куска нового кода.
- Запускаю
Restart.py, чтобы в каждый файл он добавил новый код. - Запускаю сами программы.
- При необходимости повторяю процедуру.
Что нужно прописать в файле Restart.ру?
Немного сумбурно, но если что готов ответить на вопросы.
Сам кусок кода что необходимо добавить (самостоятельно попробовал, но где-то переношу с ошибкой в виде запятой либо кавычки):
text(
[
Streamer("streamer-username07"),
Streamer("streamer-username08"),
"streamer-username09",
"streamer-username10",
"streamer-username11"
], # Array of streamers (order = priority)
followers=False, # Automatic download the list of your followers
followers_order=FollowersOrder.ASC # Sort the followers list by follow date. ASC or DESC
)
Всем откликнувшимся большое спасибо, не ожидал такого актива
Ответы (2 шт):
with open('d_data.txt', 'r', encoding='utf8') as f_src:
txt = f_src.read()
with open('d_main.py', 'r', encoding='utf8') as f:
my_file = f.read()
res = ''
for s in my_file.split('\n'):
if s == '# Но перед этой':
res +=f'# {txt.strip()} \n'
res += s+'\n'
with open('d_main.py', 'w', encoding='utf8') as f:
f.write(res)
# Вставить после этой строки
# Но перед этой
Я уже не знаю кто задает вопрос :), но предлагаю ответ:
import os
# В текущей директории создать директорию files
# закинуть все файлы в директорию files
directory = r'files/'
for f in os.listdir(directory):
if os.path.isfile(os.path.join(directory, f)):
with open(directory + f, 'a', encoding='utf8') as edit_file:
edit_file.write(f'# новая строка \n')
# во все файлы в директории files добавится "новая строка" в конец
Если обновляемый список одинаковый для всех скриптов, то было бы разумно держать его в одном месте, а концовку скриптов изменить таким образом:
streamer_data = '.../data.txt' # Путь к файлу изменяемых данных
with open(streamer_data) as data_file:
streamer_usernames = list(map(str.rstrip, data_file))
text(
list(map(Streamer, streamer_usernames)), # Array of streamers (order = priority)
followers=False, # Automatic download the list of your followers
followers_order=FollowersOrder.ASC # Sort the followers list by follow date. ASC or DESC
)
Внутри data.txt - только имена пользователей, каждое на отдельной строке без дополнительных кавычек и запятых. Разовое редактирование программ может выглядеть так:
from pathlib import Path
original_scripts = ... # путь к папке с исходными скриптами
updated_scripts = ... # путь к папке для хранение обновленных скриптов
data = ... # путь к файлу обновляемых данных
dest = Path(updated_scripts)
new_part = f'''
streamer_data = {data}
with open(streamer_data) as data_file:
streamer_usernames = list(map(str.rstrip, data_file))
text(
list(map(Streamer, streamer_usernames)),
followers=False,
followers_order=FollowersOrder.ASC
)
'''
for file in Path(original_scripts).glob('*.py'):
with open(file) as f:
script = f.read()
... # Здесь может быть очистка скрипта при необходимости
with open(dest/file.name, 'wt') as f:
f.write(script)
f.write(new_part)
P.S. Предложенный выше код добавляет в программы новые переменные. Я их использовал, чтобы последовательно раскрыть идею. Но это сопряжено с риском перекрытия ранее определенных переменных редактируемых программ. При желании, эти имена можно исключить. Например:
...
new_part = f'''
text(
[Streamer(name) for line in open({data}) if (name:=line.rstrip())],
followers=False,
followers_order=FollowersOrder.ASC
)'''
...