2011-12-11 16 views
0

私はこの出力を保存できません。誰かが解決策を持っている可能性があります。私はディレクトリといくつかのシングルファイルをリストしています。しかし、私が出力を保存するときには、ディレクトリファイルを捕まえるだけで、シングルファイルではありません。 私のコードは:pythonでファイルをリストして保存する

import os 
tosave = open('/tmp/list','ab') 
thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"] 
for f in thesource: 
    print f 
    for top, dirs, files in os.walk(f): 
     for nm in files: 
      print os.path.join(top, nm) 
      try: 
       tosave.write(top+nm+'\n') 
      finally: 
       tosave.close 

私は、ただのsshファイルをコンソール内のすべてのファイルとディレクトリを見ましたが、保存されたリストインチなぜsyslogとホストも保存しなかったのですか?

ありがとうございました!

+0

これらのディレクトリにファイルの**名前**を保存しようとしていますか? modshi ssh_config sshd_config –

+0

nopすべてのabosoluteパスをtxtファイルに保存しようとしています。私は別の問題を発見した。 –

答えて

1

のために働く場合は貼り付けながら、あなたはtosave.close()を逃した:(そうでない場合はharsh's answerをご確認ください)

finallyはここに間違っています。 finallyのコードはtryブロックの後に実行されるため、tosave.write(top+nm+'\n')の最初の実行後にファイルはtosave.close()のために閉じられます。

おそらくあなたはexcept使用することを意図した:

  # snip 
      try: 
       tosave.write(top+nm+'\n') 
      except: 
       tosave.close() 

編集:あなたのコメントに答えるために、あなたは最後の行はprint文と同じようにしたい:

   tosave.write(os.path.join(top, nm) + '\n') 
0

これは、ファイルを追加モード('a')で開いていて、その開始点を見ている可能性がありますか?その最後を見てください - 新しいファイルがそこにリストされているのを見るかもしれません。

追加モードでは、スクリプトを実行するたびに、の出力をファイルに追加します。通常は、書き込みモード('a'の代わりに'w')だけが必要です。毎回そのファイルを上書きします。

1

最後にtosave.flush()を追加してみることもできます。時々問題を引き起こします。場合によっては、バッファの内容をファイルに空にするためにフラッシュ呼び出しが必要になることがあります。

1

チェックこのケースであなた

import os 
tosave = open('/tmp/list','ab') 
thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"] 
for f in thesource: 
    if os.path.isdir(f): 
     for top, dirs, files in os.walk(f): 
      for nm in files: 
       try: 
        tosave.write(top+nm+'\n') 
    if os.path.isfile(f): 
     tosave.write(f+'\n') 
to.close() 
0

プットスクリプト末尾のclose()

これ以外の場合は、ループの最初のステップの後にファイルを閉じ、ファイルを書き込み不能にします。

1

私はすべての助けを借りて解決策を見つけ出し、それが機能しています。私はそれを共有する。

tosave = open('/tmp/list','ab') 
    thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"] 
for f in thesource: 
    if os.path.isfile(f): 
     print f 
     tosave.write(f+'\n') 
    else: 
     for top, dirs, files in os.walk(f): 
      for nm in files: 
       print os.path.join(top, nm) 
       tosave.write(top+nm+'\n') 

ありがとうございました!

+0

/etc/apache2のようなサブディレクトリがたくさんある別のディレクトリを置くと、別の問題が見つかりました/再帰的なアクションで "/"を失う /etc/apache/sites-avaibletest.vhost/etc/apache/sites-avaible/testを実行します。vhost ufffも複雑です!!! –

関連する問題