2011-06-18 6 views
1

私は、texファイルを書くためにpythonスクリプトを書いています。しかし、私は別のファイルからいくつかの情報を使用しなければなりませんでした。このようなファイルには、使用する必要がある各行にメニューの名前があります。私は私の "メニュー"の各行のリストを持つために分割を使用します。 たとえば、リストの各2番目の要素を含むセクションを作成する必要がありましたが、実行後に何か得ました。何ができますか?マルチエレメントリストを読んで、要素を探してPythonでプリントします

これは私がやっている何おおよそです:ところで

texfile = open(outputtex.tex', 'w') 
    infile = open(txtfile.txt, 'r') 
     for line in infile.readlines(): 
      linesplit = line.split('^') 
      for i in range(1,len(infile.readlines())): 
       texfile.write('\section{}\n'.format(linesplit[1])) 
       texfile.write('\\begin{figure*}[h!]\n') 
       texfile.write('\centering\n') 
       texfile.write('\includegraphics[scale=0.95]{pg_000%i.pdf}\n' %i) 
       texfile.write('\end{figure*}\n') 
       texfile.write('\\newpage\n') 
    texfile.write('\end{document}') 
    texfile.close() 

、inclugraphicsラインで、私は「25050」と「0001」からPG_後に番号をincreaceしなければなりませんでした。すべての手がかり?

本当にありがとうございます。

+5

入力ファイルと期待される出力の例が役に立ちます。 – Blair

答えて

2

私はあなたの質問に全く従っていません。しかし、私はあなたのコードでいくつかのエラーを参照してください。最も重要なのは:

for line in infile.readlines(): 
    ... 
    ... 
     for i in range(1,len(infile.readlines())): 

ファイルを読み終えたら、それはなくなりました。 (あなたはそれを取り戻すことができますが、この場合は意味がありません)。つまり、readlinesへの2番目の呼び出しは何も得られないので、len(infile.readlines()) == 0です。あなたがここに書いたことが本当にあなたがしたいことであると仮定すると(つまり、file_len * (file_len - 1) + 1行を書きますか?)、そのファイルをリストに保存する必要があります。また、ファイル名の前後に引用符を付けることもなく、インデントが奇妙になりました。おそらく、あなたが実際にネストされたループを望んでいない

with open('txtfile.txt', 'r') as infile: # (with automatically closes infile) 
    in_lines = infile.readlines() 
in_len = len(in_lines) 

texfile = open('outputtex.tex', 'w') 
for line in in_lines: 
    linesplit = line.split('^') 
    for i in range(1, in_len): 
     texfile.write('\section{}\n'.format(linesplit[1])) 
     texfile.write('\\begin{figure*}[h!]\n') 
     texfile.write('\centering\n') 
     texfile.write('\includegraphics[scale=0.95]{pg_000%i.pdf}\n' %i) 
     texfile.write('\end{figure*}\n') 
     texfile.write('\\newpage\n') 
texfile.write('\end{document}') 
texfile.close() 

:?これを試してみてください

infile = open('txtfile.txt', 'r') 
texfile = open('outputtex.tex', 'w') 
for line_number, line in enumerate(infile): 
    linesplit = line.split('^') 
    texfile.write('\section{{{0}}}\n'.format(linesplit[1])) 
    texfile.write('\\begin{figure*}[h!]\n') 
    texfile.write('\centering\n') 
    texfile.write('\includegraphics[scale=0.95]{pg_000%i.pdf}\n' % line_number) 
    texfile.write('\end{figure*}\n') 
    texfile.write('\\newpage\n') 
texfile.write('\end{document}') 
texfile.close() 
infile.close() 
+0

簡単な方法でファイルの行を繰り返し処理したい場合は、 'readlines()'は必要ありません。 'for line in infile:'を実行するだけです。 'readlines()'は中間リストを作成します。中間リストは保存しない限り不要です。 – senderle

+0

こんにちは@Senderle、それはまさに私が必要なものです!!!。私は本当にリストを保存したくない、いくつかの情報を読んでテキストに入れるだけです。本当にありがとう。ちなみに、\ section行を書くとき、テキストファイルに必要なのは\ section {blablabla}ですが、 "{}"が書式のものとして使われているので、それを書く方法はわかりません右。 – Alejandro

+0

@Alejandro、ああ、申し訳ありません、私はそれをテストしませんでした。中括弧にインデックス番号を付ける必要があります。 '' {0} '。format(5) 'のように。少なくとも私はあなたを正しく理解している。 – senderle

関連する問題