2016-06-14 14 views
-1

私はLaTeX形式の手紙を持っています。私はPythonで短い引数を取る引数を1つ(引数)とし、一般的な文字形式とアドレスを持つ.texファイルを作成します。小さな変更を加えた.texファイルを複製するPythonスクリプト

from sys import argv 
    script, addressee = argv 
    file = open('newletter.tex', 'w') 
    file.write("\begin{Document} Dear " + addressee + ", \n Greetings, how are you? Sincerely, Me \end{Document}") 
    file.close() 

大量のテキストを書き込む機能がありますか?また、.texファイルにはプログラミング構文が含まれていることがわかります。これは文字列に変換されている限り、Pythonはこれを無視しますか?大きなブロックを文字列に強制する必要がありますか?前もって感謝します!

+0

「* .texファイルにはプログラミング構文が含まれています」とはどういう意味ですか?あなたはファイルの内容の(小さな)例を挙げることができますか? –

答えて

1

インタープリタに直接print "\begin..."を入力すると、文字列の先頭に\bが含まれていないことがわかります。これは、\bは、printステートメント(または3.xの場合は関数)が認識する(バックスペースになることがある)文字であるためです。

この混乱を避けるために、あなたはpythonで事前保留中「R」で示された、「生の文字列を」使用することができますファイルパスを表す文字列を扱う場合、

通常
>>> a = "\begin" 
>>> b = r"\begin" 
>>> print a 
egin 
>>> print b 
\begin 
>>> 

、または\文字を含むものがある場合は、生の文字列を使用する必要があります。

テンプレートに情報を挿入する限り、文字列連結ではなくformat()関数を使用することをお勧めします。これを行うには、あなたの文字列は次のようになります。

r"\begin{{Document}} Dear {} \n Greetings, how are you? Sincerely, Me \end{{Document}}".format(addressee) 

(この場合addresseeで)関数の引数は文字列内の各{}に挿入されます。このため、文字通りに解釈される中括弧は、二重に含めてエスケープする必要があります。

1

私は、QXQ_ADDRESSEE_QXQのようなものに設定されたアドレスでletter.texとして最初にtexファイルを作成する方法をとっています。

pythonスクリプトでは、ファイル全体をメモリに読み込んでいました。ファイルから読み込むと、適切なエスケープを持つ生の文字列として扱われます。

with open('letter.tex', 'r') as f: 
    raw_letter = f.readlines() 

次に、置換を行い、その文字列をファイルに書き込んでください。

raw_letter.replace("QXQ_ADDRESSEE_QXQ", newname) 
with open('newletter.tex', 'w') as f: 
    f.write(raw_letter) 
関連する問題