cout_HelloWorld_andl
@cout_HelloWorld_andl
Обожаю змею

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

Привет! я вот тут не могу решить проблему, подскажите как сделать так что бы пайтон записывал в файл с кодом, текст, но в определённом методе?
вот есть такой
шаблон

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.animation import Animation
from kivy.clock import Clock
from kivy.config import Config
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivy.core import audio
from kivy.core.audio import SoundLoader
#import socket
#sock = socket.socket()
#sock.bind(('', 9090))
#sock.listen(1)
 
 
Config.set('graphics', 'resizable', '0')
Config.set('graphics', 'width', '1280')
Config.set('graphics', 'height', '720')
 
class MainApp(App):
    def build(self):
        main_layout = FloatLayout()
 
 
 
 
 
 
 
 
 
        return main_layout
 
 
 
if __name__ == '__main__':
    app = MainApp()
    app.run()



как сделать так что бы пайтон записал текст после строчек
def build(self):
        main_layout = FloatLayout()
        #тут


но не номеру строчки, а по названию функции, что бы пайтон искал метод "def build" и после еще 1 строки записал текст?
  • Вопрос задан
  • 55 просмотров
Решения вопроса 2
st0ne_c0ld
@st0ne_c0ld
По исходному условию, можно написать regexp или "стейт машину" с хардкодом содержимого файла, но если содержимое будет меняться - код надо будет переписывать. Ниже вариант проще, но он отличается от исходного условия.

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

your_new_code="""
    print(123)
    return False
"""
...
updated_text = """
...
class MainApp(App):
    def build(self):
        main_layout = FloatLayout()
        {some_text}
...
""".format(some_text=your_new_code)
Ответ написан
Vindicar
@Vindicar
RTFM!
Ну самый лобовой способ - изменить файл-шаблон так (сокращено):
class MainApp(App):
    def build(self):
        main_layout = FloatLayout()
        # INSERT CODE HERE
        return main_layout
 
if __name__ == '__main__':
    app = MainApp()
    app.run()

Тогда можно будет сделать просто
with open('file.py', 'rt', encoding='utf-8') as src:
    data = src.read()
with open('file2.py', 'wt', encoding='utf-8') as dest:
    dest.write(data.replace('# INSERT CODE HERE', 'тут твой код'))

Разумеется, строка # INSERT CODE HERE не должна встречаться в других местах файла-шаблона.
Также подразумевается, что файл-шаблон сам по себе, и не изменяется программно - вместо этого результат записывается в другой файл, который уже используется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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