17

別のPythonスクリプト(filegenerated.py)を生成するスクリプト(generate_script.py)を書きたい

これまでのところ、generate_script.pyを作成しました。

import os
filepath = os.getcwd()
def MakeFile(file_name):
    temp_path = filepath + file_name
    file = open(file_name, 'w')
    file.write('def print_success():')
    file.write('    print "sucesss"')
    file.close()
    print 'Execution completed.'

ファイル(filegenerated.py)は次のようになります。

def print_success():「成功」を出力します

今、私はすべての改行を手動で挿入したくありません(オペレーティングシステムの問題もあります)... PythonコードをPythonファイルに書き込むために使用できるテンプレートシステムはありますか?誰かが例を持っていますか?

どうもありがとう!

4

4 に答える 4

14

複数行の文字列を使用できます。

import os
filepath = os.getcwd()
def MakeFile(file_name):
    temp_path = filepath + file_name
    with open(file_name, 'w') as f:
        f.write('''\
def print_success():
    print "sucesss"        
''')
    print 'Execution completed.'

テンプレートコードを残りのコードと一緒にインデントしたいが、別のファイルに書き込むときにインデントしたい場合は、次を使用できますtextwrap.dedent

import os
import textwrap

filepath = os.getcwd()
def MakeFile(file_name):
    temp_path = filepath + file_name
    with open(file_name, 'w') as f:
        f.write(textwrap.dedent('''\
            def print_success():
                print "sucesss"        
                '''))
    print 'Execution completed.'
于 2012-08-05T10:05:53.027 に答える
11
lines = []
lines.append('def print_success():')
lines.append('    print "sucesss"')
"\n".join(lines)

複雑なものを動的に構築している場合:

class CodeBlock():
    def __init__(self, head, block):
        self.head = head
        self.block = block
    def __str__(self, indent=""):
        result = indent + self.head + ":\n"
        indent += "    "
        for block in self.block:
            if isinstance(block, CodeBlock):
                result += block.__str__(indent)
            else:
                result += indent + block + "\n"
        return result

ブロックなどに新しい行を追加するために、いくつかのメソッドを追加することもできますが、私はあなたがその考えを理解していると思います。

例:

ifblock = CodeBlock('if x>0', ['print x', 'print "Finished."'])
block = CodeBlock('def print_success(x)', [ifblock, 'print "Def finished"'])
print block

出力:

def print_success(x):
    if x>0:
        print x
        print "Finished."
    print "Def finished."
于 2012-08-05T10:10:29.153 に答える
5

\nと\tを使用してみてください

import os
filepath = os.getcwd()
def MakeFile(file_name):
    temp_path = filepath + file_name
    file = open(file_name, 'w')
    file.write('def print_success():\n')
    file.write('\tprint "sucesss"')
    file.close()
    print 'Execution completed.'

出力する

def print_success(): 
    print "sucesss"

またはマルチライン

import os
filepath = os.getcwd()
def MakeFile(file_name):
    temp_path = filepath + file_name
    file = open(file_name, 'w')
    file.write('''
def print_success():
    print "sucesss"
    ''')
    file.close()
    print 'Execution completed.'
于 2012-08-05T10:07:01.240 に答える
2

untubuの回答は、おそらくよりPython的な回答ですが、コード例では、改行文字とタブが欠落しています。

file.write("def print_success():\n")
file.write('\tprint "success"\n\n')

これにより、間隔と改行が表示されます。以下のリンクは、受け入れられたものに関するいくつかのヒントを提供します。

http://docs.python.org/release/2.5.2/ref/strings.html

于 2012-08-05T10:12:35.860 に答える